按下后退按钮后立即完成活动

时间:2014-07-09 17:19:22

标签: android keyboard android-edittext

我创建了一个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()无法正常工作,因为当活动中出现键盘时,它不会被解雇。

3 个答案:

答案 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();
            }
        });
相关问题