我创建了一个activity
,它应该会弹出键盘。因此,我使用requestFocus()
作为 edittext 。但我不希望只有键盘消失。相反,即使键盘存在,我也希望在按下后退按钮时将整个活动设为finish()
。我试过了this answer,但它没有用。虽然看起来有点额外的工作,但我也试过了this,但这并不适用于textwatcher。以下是edittext。我将它的维度属性保持为0dp,因为要避免向用户显示密码字段。任何帮助实现这一点是值得赞赏的。如果需要任何进一步的信息,请告诉我。
<EditText
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/passwordet"
android:inputType="number"
/>
P.S:覆盖onBackPressed()
无法正常工作,因为当活动中出现键盘时,它不会被解雇。
答案 0 :(得分:0)
您可以覆盖onBackPressed
方法来完成活动:
@Override
public void onBackPressed() {
finish();
}
答案 1 :(得分:0)
扩展EditText并添加以下方法。
public class MyEditText扩展了EditText {
OnKeyListener onKeyListener = null;
public static int BACK_KEY = 10001;
public void setOnKeyListener(OnKeyListener l) {
super.setOnKeyListener(l);
onKeyListener = l;
Log.i(TAG, "setOnKeyListener Called");
}
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
Log.i(TAG, "onKeyPreIme");
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_UP) {
if (onKeyListener != null) {
onKeyListener.onKey(this, BACK_KEY, event);
}
return false;
}
return super.dispatchKeyEvent(event);
}
}
从活动开始 editText.setOnKeyListener(本); 并处理onKey方法
答案 2 :(得分:0)
您需要创建自定义EditText才能捕获keyBoardDismissEvent。
您可以尝试这样的事情:
public class CustomEditText extends EditText {
private OnKeyboardDismissListener listener;
public void setOnKeyBoardDismissListener(OnKeyboardDismissListener listener) {
this.listener = listener;
}
public CustomEditText(Context context) {
super(context);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && listener != null)
listener.onKeyBoardDismiss();
return super.onKeyPreIme(keyCode, event);
}
static interface OnKeyboardDismissListener {
void onKeyBoardDismiss();
}
}
布局
<YourPackageName.CustomEditText android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
内部活动:
CustomEditText editText = (CustomEditText) findViewById(R.id.editText);
editText.setOnKeyBoardDismissListener(new OnKeyboardDismissListener() {
@Override
public void onKeyBoardDismiss() {
MainActivity.this.finish();
}
});