アプリケーションがあり、かなり大量のアクションでソフトキーボードを閉じる必要があります。たとえば、ボタンをクリックしたとき、新しいレイアウトが描画されたとき、画面の向きが変わったとき、コントローラーがUI に指示したときなどです。optionsMenuButton を使用して、ViewFlipper でビューを反転します。明らかに、反転したビューでキーボードを非表示にする必要があります (入力フィールドはありません)。
これまでにこれらを試してみましたが、これらが信頼できない理由を教えてください。
多くの editTexts やその他のビューがあるため、これは機能しませんでした。可能であれば、引数としてビューを必要としない、より一般的なものが必要です。
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
これは私にとってはまったく機能しません:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
これは機能しますが、ビューが反転するとすぐにキーボードが再びポップアップします。
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
これは時々機能しますが、ほとんどの場合、getCurrentFocus() は null を返します。
InputMethodManager inputManager = (InputMethodManager)
Context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
これは、キーボードが表示されている場合にのみ機能します。
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
これは、最初のコードのように EditText では機能しませんが、方向の変更や oncreate が呼び出されるたびに変更されるルート レイアウトでは機能します。横/縦と通常/大で異なるレイアウト XML があります。すべてのルート レイアウトには ID がありますroot
。これは最初はうまく機能しますが、その後は機能しなくなります。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
結論: 私は非常に多くのソフトキーボード非表示方法を試しましたが、どれも確実に機能しないようです。ソフトキーボードを確実に隠す方法はありますか?