Ответ 1
Переключение на предыдущий метод ввода с текущего метода ввода:
//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();
}
Если вы хотите переключиться на определенный метод ввода, идентификатор которого вы знаете, вы можете сделать это, как показывают строки с комментариями.
EDIT @pRaNaY предложил один .getWindow()
в бесшумном редактировании (нажмите "отредактировано" ниже, чтобы просмотреть историю). Я помню, что он не работал для Android 2.3; если вы обратитесь к документам, вы увидите, что первый вызов InputMethodService.getWindow()
возвращает Dialog
(который не является подклассом Window
), а второй вызов Dialog.getWindow()
возвращает Window
. Нет Dialog.getAttributes()
, поэтому с одним .getWindow()
он даже не будет компилироваться.