仅在任何编辑文本外部单击时隐藏数字键盘

时间:2015-09-08 18:03:31

标签: android touch android-softkeyboard

我有三个不同的编辑文本,限制只输入数值,因此点击任何一个编辑文本会打开数字键盘。

我尝试为所有编辑文本实现setOnFocusChangeListener,以确保当用户点击任何编辑文本之外的任何位置时隐藏键盘。

editText1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            hideKeyboard(v);
        }
    }
});

editText2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            hideKeyboard(v);
        }
    }
});

editText3.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            hideKeyboard(v);
        }
    }
});

这是'hideKeyBoard'的实现

public void hideKeyboard(View view) {
        InputMethodManager inputMethodManager =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

这很好,但是,当我将焦点从一个EditText更改为另一个EditText时,键盘隐藏。这种行为可能会让用户感到沮丧。

我该如何处理它并避免不必要的键盘隐藏。

P.S 我需要确保键盘在任何情况下都不是按字母顺序排列的。

1 个答案:

答案 0 :(得分:0)

感谢MarianoZorrila纠正我解决问题的方法。
以下是我为解决这个问题所做的更改。

  1. 为我的相对布局提供了ID

    <RelativeLayout
    ...
    ...
    android:id="@+id/parent">
    
  2. 对Java文件的修改

    View parent = findViewById(R.id.parent);
    parent.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if(hasFocus){
                hideKeyboard(view);
            }
        }
    });