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

Jes*_* MJ 35 android

我有一个带有edittext的活动.当活动到来时,我总是关注Edittext.我通过给予使软键盘始终可见

android:windowSoftInputMode="stateAlwaysVisible" 
Run Code Online (Sandbox Code Playgroud)

在清单中.我正在按下软键盘的完成按钮功能.实际上我需要的是当用户参加此活动时,应始终显示软键盘.现在我禁用后退按钮,通过覆盖,什么都不做.

@Override
public void onBackPressed() {
    // Do nothing
}
Run Code Online (Sandbox Code Playgroud)

但软键盘在背压上解散.如何摆脱这个.我试过这个Prevent软键盘被解雇但仍然在后面的键盘上得到了解雇.但它再次按下后退按钮,我的需要是背压不应该忽略软键盘.任何帮助将不胜感激.

Sha*_*tan 18

创建一个自定义EditText,如下面的一个界面:

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);
    }
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中创建初始化您的CustomEditText并使用:

customEditText.setHandleDismissingKeyboard(this);
Run Code Online (Sandbox Code Playgroud)

然后实现class和override方法并将代码放入其中

有关我的答案的更多信息,你需要的是onKeyPreIme,你可以在EditText类中覆盖它(因为我发布给你)来处理所有键,比如后键或任何其他键盘键,我把一个内部接口放在自定义中要从这个类中调用回到你想要的每个活动或类的类,你也可以用静态方法做到这一点,并且你想要防止解除键盘,你可以直接返回true.

使用CustomEditText你可以使用xml或在java中,定义它并像其他小部件一样初始化(Button,TextView,...),只有不同的是你需要在你的xml中定义它,如:

 <yourPackage.CustomEditText ..... />
Run Code Online (Sandbox Code Playgroud)