我有两个EditText
小部件,并且希望在用户单击以外的部件时隐藏键盘(如果当时那个键盘仍然处于活动状态)。
为此,我在两个对象上都使用了setOnFocusChangeListener
:
eTNom=convertView.findViewById(R.id.EditText_nom);
eTNom.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus)
hideKeyboard(v);
}
});
另一个setOnFocusChangeListener
的处理方式完全相同。
但是,这不起作用,因为每次我单击两个EditText
之一时,都会多次调用onFocusChange方法(4-5)。这样会导致hasFocus
变量在调用方法后迅速在true和false之间切换,而键盘只显示很短的时间。
这正是正在发生的事情:https://imgur.com/ZFjXPPz
我看到这个问题曾经问过一次,但是接受的答案建议在清单文件中添加android:windowSoftInputMode="adjustPan"
。我这样做了,但是并不能解决我的问题。我还看到有人建议在父版式中将 clickable , focusable 和 focusableInTouchMode 属性设置为true
, ,但仍然无法正常工作。
我认为问题出在我有两个EditText
小部件,但是当我从活动中删除一个小部件时,我仍然遇到相同的问题,因此我现在几乎迷失了,任何帮助都会非常感谢。
谢谢。
答案 0 :(得分:2)
将其放在Menifest中的行下方
<activity android:name=".ActivityName"
android:windowSoftInputMode="stateHidden" />
或者您可以使用以下两个功能来显示/隐藏键盘
public void hideSoftKeyboard() {
if(getCurrentFocus()!=null) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
/* Shows the soft keyboard */
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.showSoftInput(view, 0);
}
答案 1 :(得分:0)
以这种方式应用:
etTextInput.setOnFocusChangeListener((v, hasFocus) -> {
if (hasFocus) {
etTextInput.removeTextChangedListener(textWatcher);
etTextInput.addTextChangedListener(textWatcher);
} else {
etTextInput.removeTextChangedListener(textWatcher);
}
});