禁用EditText的软键盘

6
我有一个EditText,我想自己处理输入,因此在点击它时(或选择更改、焦点更改、长按等情况下)不希望弹出软键盘。但是,我仍然希望能够选择文本、更改光标位置、复制/粘贴等操作。
我尝试将android:windowSoftInputMode =“stateAlwaysHidden”放入清单中,但似乎没有什么作用。我还尝试添加以下内容:
edittext.setOnTouchListener(new OnTouchListener() {
    @Override public boolean onTouch(View v, MotionEvent event) {
        EditText edittext = (EditText) v;
        int inType = edittext.getInputType();       // Backup the input type
        edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard
        edittext.onTouchEvent(event);               // Call native handler
        edittext.setInputType(inType);              // Restore input type
        return true; // Consume touch event
    }
});

这将禁用键盘,同时防止光标工作。

目前,我基本上是在尝试为所有可能弹出键盘的情况添加监听器,以切换它关闭,但这非常笨重,而且我无法捕获所有情况。是否有更好的方法来禁用特定EditText或片段的软键盘?


1
如果您自己处理输入,为什么不使用 TextView?您可以使其可选择,我认为这将给您想要的效果。 - draksia
在触摸时使editText处于未选中状态。 - Barun
1
我还想要EditText中的闪烁光标,并希望它能与硬件键盘和其他输入方法一起使用。 - David Z
1
当,还是没有答案,我也需要这个... - Denny
2个回答

0

显然,最好的解决方案是Google提供一个像这样工作的inputType。

以下方法通常有效。当键盘加载时,它有时会闪烁,然后立即消失。但是,它只是监听您何时单击文本视图,然后在发生这种情况时杀死键盘。

它无法考虑到如果文本字段以其他方式获得焦点,但对于我的目的(我有一个用于条形码阅读器的文本字段,由条形码阅读器(硬件键盘)读取条形码),因此软键盘毫无意义。

editView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    //imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
                }
            }
        });

我还添加了另一行你可能需要的内容,并将其注释掉。也就是说,如果你想隐藏Android启动的软键盘,或者如果用户通过长按菜单加载键盘,那么可能会关闭它。


-1

试试这段代码。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Disable IME for this application
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

        setContentView(R.layout.activity_layout);

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