在Android后退按钮按下时防止软键盘解除

Prevent softkeyboard dismiss on the android back button press

本问题已经有最佳答案,请猛点这里访问。

我有一个编辑文本的活动。当活动开始的时候,我总是把注意力集中在编辑文本上。我通过给予

1
android:windowSoftInputMode="stateAlwaysVisible"

在舱单上。我正在按软键盘上的"完成"按钮。实际上,我需要的是,当用户进行此活动时,软键盘应该始终存在。现在我通过覆盖和不做任何事情禁用了后退按钮。

1
2
3
4
@Override
public void onBackPressed() {
    // Do nothing
}

但软键盘在后压时会被忽略。如何解决这个问题。我试过这样做,以防软键盘被解雇,但还是在后面按键盘被解雇。但它回来的时候再按一下后退按钮,我需要的是后压不应解除软键。如有任何帮助,我们将不胜感激。


创建一个自定义的EditText,如下所示,带有一个接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class CustomEditText extends EditText {


    public void setHandleDismissingKeyboard(
        handleDismissingKeyboard handleDismissingKeyboard) {
           this.handleDismissingKeyboard = handleDismissingKeyboard;
    }

    private handleDismissingKeyboard handleDismissingKeyboard;

    public interface handleDismissingKeyboard {
        public void dismissKeyboard();
    }

    @SuppressLint("NewApi")
    public CustomEditText(Context context, AttributeSet attrs,
                             int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }


    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
                && event.getAction() == KeyEvent.ACTION_UP) {
            handleDismissingKeyboard.dismissKeyboard();
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

然后在"活动"中,创建"初始化客户"文本并使用:

1
customEditText.setHandleDismissingKeyboard(this);

然后实现类和重写方法并将代码放入其中

有关我的答案的更多信息,您所需要的就是onKeyPreIme,您可以在edittext类中覆盖它(我为您发布时),以处理该类上的所有键,如back键或任何其他键盘键,我在自定义类中放置了一个内部接口,以便从这个类中获得对您想要的每个活动或类的调用,您也可以使用静态方法来实现这一点,并且由于您希望避免放弃键盘,因此您可以在其中返回true

对于使用EDCOX1(2)而言,可以使用XML或Java,定义并初始化它,像其他小部件(按钮、文本视图、……)一样。,唯一不同的是,您需要在XML中定义它,如下所示:

1
 <yourPackage.CustomEditText ..... />