禁用Edittext的软键盘

时间:2014-09-18 17:22:41

标签: android

我有一个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或片段的软键盘?

2 个答案:

答案 0 :(得分:0)

显然,最好的解决方案是,如果Google提供的输入类型与此类似。

以下情况往往起作用。它有时会在键盘加载时闪烁,然后立即被谋杀。但是,它只是在你点击textview时听,然后当它发生时它会杀死键盘。

它无法解释诸如文本字段是否以其他方式获得焦点之类的事情,但是出于我的目的(我有条形码阅读器的文本字段,条形码阅读器(硬件键盘)读取条形码) ),所以软键盘毫无意义。

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 :(得分:-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);