2013-05-22 14 views
10

http://developer.android.com/guide/topics/text/creating-input-method.html#GeneralDesign 読み取り:複数のIMEがデバイスにインストールされてもよいアンドロイド:異なるIMEへの切り替えは、プログラム

ので、ユーザは、入力メソッドUIから直接、異なるIMEに切り替えるするための方法を提供します。

2つの入力メソッドのソースがあり、それを変更できるとしましょう。 私は、ユーザーがそれらの間をすばやく切り替えるようにして、そのためのボタンを予約する準備ができました。 「入力メソッドUIから別のIMEに直接切り替える」

答えて

13

は次のとおりです。

//final String LATIN = "com.android.inputmethod.latin/.LatinIME"; 
// 'this' is an InputMethodService 
try { 
    InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
    final IBinder token = this.getWindow().getWindow().getAttributes().token; 
    //imm.setInputMethod(token, LATIN); 
    imm.switchToLastInputMethod(token); 
} catch (Throwable t) { // java.lang.NoSuchMethodError if API_level<11 
    Log.e(TAG,"cannot set the previous input method:"); 
    t.printStackTrace(); 
} 

あなたは、そのIDあなたが知っている特定の入力方法に切り替えたい場合は、あなたのように行うことができますコメントアウトされた行は示唆しています。

EDIT @pRaNaYは、サイレント編集で単一の.getWindow()を提案しました(履歴を見るには、下の「編集」をクリックしてください)。 Android 2.3では動作しなかったことを覚えています。ドキュメントを参照すると、最初の呼び出しInputMethodService.getWindow()Dialog(サブクラスはWindowではない)を返し、2番目の呼び出しDialog.getWindow()Windowを返します。 Dialog.getAttributes()はありません。したがって、単一の.getWindow()でコンパイルされません。

+0

)最終IBinderトークン= this.getWindow()。getWindow()。getAttributes()。token; – Ram

+0

プロジェクトがInputMethodServiceであり、現在ユーザーによって選択されている場合は、サービスクラスのインスタンスを取得する方法 – 18446744073709551615

+0

私は混乱しています、この解決策は@Raghav Soodが言っていたことと矛盾していませんか?現在アクティブな入力メソッドのトークンを持つアプリケーションまたはサービスから呼び出すことができます。 –

10

セキュリティ上の理由から、ユーザーの現在アクティブなIMEをコードで変更することはできません。

しかし、システムが提供するダイアログを表示して、ユーザーが他の有効なものを選択できるようにすることができます。現在のインプットメソッドから前の入力方法への切り替え

InputMethodManager imeManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
if (imeManager != null) { 
    imeManager.showInputMethodPicker(); 
} else { 
    Toast.makeText(context ,"Error", Toast.LENGTH_LONG).show(); 
} 
+0

それで、なぜGoogleはそれを行うべきだと示唆しているのですか? – 18446744073709551615

+0

システムによって提供されるスイッチャーダイアログを表示するための手段。このダイアログを表示せずにはできません。 –

+0

次に、そのスイッチャーのダイアログをどのように呼び出すのですか?アプリケーションではなく、入力メソッドを記述しています。 – 18446744073709551615

関連する問題