Android 按下“后退”按钮后立即完成活动
我创建了一个Android 按下“后退”按钮后立即完成活动,android,keyboard,android-edittext,Android,Keyboard,Android Edittext,我创建了一个活动,小键盘应该一直弹出。因此,我将requestFocus()用于edittext。但我不想让键盘消失。相反,我希望当按下后退按钮时,即使有键盘,整个活动也能finish()。我试过了,但没用。我也试过了,虽然它看起来有点额外的工作,但这不适用于textwatcher。以下是编辑文本。我将它的维度属性保留为0dp,因为这样可以避免向用户显示密码字段。感谢您对实现此目标的任何帮助。如果需要进一步的信息,请告诉我 <EditText android:layout_
活动
,小键盘应该一直弹出。因此,我将requestFocus()
用于edittext。但我不想让键盘消失。相反,我希望当按下后退按钮时,即使有键盘,整个活动也能finish()
。我试过了,但没用。我也试过了,虽然它看起来有点额外的工作,但这不适用于textwatcher。以下是编辑文本。我将它的维度属性保留为0dp,因为这样可以避免向用户显示密码字段。感谢您对实现此目标的任何帮助。如果需要进一步的信息,请告诉我
<EditText
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/passwordet"
android:inputType="number"
/>
p.S:重写
onBackPressed()
不起作用,因为当活动中有键盘时,它不会被触发。您可以重写onBackPressed
方法来完成活动:
@Override
public void onBackPressed() {
finish();
}
扩展EditText并添加以下方法 公共类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方法上的句柄为了捕获keyBoardDismissEvent,您需要创建一个自定义的EditText 您可以尝试以下方法:
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"/>
如果你完全读了我的问题,我会很高兴的。键盘存在时onBackPressed()不会被触发。请阅读我的问题好吗?我已经在我的问题中链接了这个答案,但它不起作用。老板,如果键盘可见,onBackKeyPressed不会被呼叫。。要在back key上获得通知,我们需要这样做。。首先在OnKeyPrime方法上显示toast,并确认是否调用了它。然后你需要使用你自己的回电或任何东西来通知活动。。如果你想要完整的源代码。。张贴你的申请样本,我可以做到这一点。
CustomEditText editText = (CustomEditText) findViewById(R.id.editText);
editText.setOnKeyBoardDismissListener(new OnKeyboardDismissListener() {
@Override
public void onKeyBoardDismiss() {
MainActivity.this.finish();
}
});