EditText禁止软键盘弹出,不影响其他功能

遇见“EditText禁止软键盘弹出”需求时,上网搜了一下,从一个博主的文章中发现了一个方法:

editText.setShowSoftInputOnFocus(false);

但是程序退到后台又切回前台时,软键盘又弹出来了。于是想到在onResume中隐藏软键盘不就好了?:

    @Override
    public void onResume() {
        super.onResume();
        Window window = activity.getWindow();
        View view = window.peekDecorView();
        if (view != null) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

很遗憾,这样做不行,有点不知所措的时候,想起了ViewTreeObserver的addOnGlobalLayoutListener监听,试了一下发现这回没问题了。

完整的代码:

        editText= (EditText) mainView.findViewById(R.id.editText);
        editText.setShowSoftInputOnFocus(false);
        editText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Window window = activity.getWindow();
                View view = window.peekDecorView();
                if (view != null) {
                    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                }
            }
        });

顺便记录下两个方法,今后想用的时候就不用自己写了。

由于是使用自己实现的键盘,而不使用系统的键盘,所以要手动确定光标的位置,好往EditText中添加和删除字符。

    //EditText中添加字符    
    void addEditTextValue(EditText editText, String textValue) {
        //获得光标的位置
        int index = editText.getSelectionStart();
        StringBuffer sb = new StringBuffer(editText.getText().toString().trim());
        //将字符插入光标所在的位置
        sb = sb.insert(index, textValue);
        editText.setText(sb.toString());
        //设置光标的位置保持不变
        Selection.setSelection(editText.getText(), index + 1);
    }

    //EditText中删除字符   
    void deleteEditTextValue(EditText editText) {
        StringBuffer sb = new StringBuffer(editText.getText().toString().trim());
        int index = editText.getSelectionStart();
        if (index > 0) {
            sb = sb.delete(index - 1, index);
            editText.setText(sb.toString());
            Selection.setSelection(editText.getText(), index - 1);
        }
    }

 

你可能感兴趣的:(Android开发小记)