防止软键盘被关闭。

11

有很多关于如何以编程方式显示/隐藏软键盘的问题。

然而,众所周知,安卓的后退按钮会导致键盘被取消。是否有一种方法可以防止用户通过按下后退按钮来取消键盘?

我尝试捕获后退按钮,但当键盘被显示时,我的活动中的onKeyDown不会在按下后退键和软键盘可见时被调用。

非常感谢任何建议。


1
这似乎有些反用户。你为什么想这样做? - Rich Schuler
2个回答

8
我已经找到了解决方案:
public class KeyBoardHolder extends EditText {
    public KeyBoardHolder(Context context) {
        super(context);
    }

    public KeyBoardHolder(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public KeyBoardHolder(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public KeyBoardHolder(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return true;
        }
        return false;
    }
}

这可以防止按下返回按钮时键盘关闭。


3
我使用以下两种方法完成了它:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK)     
    {
        ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput
                (InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
    }
    return super.onKeyUp(keyCode, event);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK)     
    {
        ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput
                (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }
    return super.onKeyDown(keyCode, event);
}

1
无法工作,按下返回键后键盘仍然隐藏。 - htafoya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接