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();
            }
        });