編集に Contextual ActionBar を使用しています。キーボードが表示されていて、ハードウェアの [戻る] ボタンを押して非表示にしたい場合、キーボードは非表示になりますが、コンテキスト アクションバーもキャンセルされ、どうすればよいかわかりません。それを続けてください。
誰?
編集に Contextual ActionBar を使用しています。キーボードが表示されていて、ハードウェアの [戻る] ボタンを押して非表示にしたい場合、キーボードは非表示になりますが、コンテキスト アクションバーもキャンセルされ、どうすればよいかわかりません。それを続けてください。
誰?
ハードウェアをオーバーライドしてBack Key
、期待される動作をboolean
次のように処理する必要があります。
// boolean isVisible to retrieve the state of the SoftKeyboard
private boolean isVisible = false;
// isVisible becomes 'true' if the user clicks on EditText
// then, if the user press the back key hardware, handle it:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// check isVisible
if(isVisible) {
// hide the keyboard
InputMethodManager mImm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
mImm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
isVisible = false;
} else {
// remove the CAB
mActionMode.finish();
}
}
return false;
}
別の解決策は、が表示され dispatchKeyEvent
ているときにまだ呼び出されているメソッドを呼び出すことです。CAB
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
// check CAB active and isVisible softkeyboard
if(mActionModeIsActive && isVisible) {
InputMethodManager mImm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
mImm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
isVisible = false;
return true;
// Maybe you might do not call the 'else' condition, anyway..
} else {
mActionMode.finish();
return true;
}
}
return super.dispatchKeyEvent(event);
}
これでうまくいくはずですが、テストしていません。お役に立てれば。
出典:ソフトキーボードが開いているときにAndroidの戻るキーをオーバーライドする方法-戻るボタンを押してアクションモードをキャンセルしないようにする