วิธีนี้จะได้ผลโดยไม่จำเป็นต้องเปลี่ยนกิจกรรมของคุณ android:windowSoftInputMode
ขั้นตอนที่ 1: ขยายคลาส EditText และแทนที่สองสิ่งนี้:
@Override
public void setOnEditorActionListener(final OnEditorActionListener listener) {
mEditorListener = listener;
super.setOnEditorActionListener(listener);
}
@Override
public boolean onKeyPreIme(final int keyCode, final KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (mEditorListener != null) {
mEditorListener.onEditorAction(this, android.R.id.closeButton, event);
}
}
return super.onKeyPreIme(keyCode, event);
}
ขั้นตอนที่ 2: สร้างสองสิ่งนี้ในกิจกรรมของคุณ:
private void initKeyboard() {
final AppEditText editText = findViewById(R.id.some_id);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
setKeyboard(hasFocus);
}
});
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event == null || event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
editText.clearFocus();
}
return false;
}
});
}
public void setKeyboard(boolean isShowing) {
}
*** จำไว้ว่าในการclearFocus
ทำงานคุณต้องกำหนดให้พาเรนต์หรือลูกคนแรกในลำดับชั้นพาเรนต์โฟกัสได้
setFocusableInTouchMode(true)
setFocusable(true)