我的Activity
只有一个EdtiText
。当Activity
开始时,EditText
会聚焦,并显示软键盘。这似乎发生在onResume
之后,因为当我以编程方式隐藏onResume
中的键盘时,它无法正常工作。当我这样做时:
@Override
protected void onResume() {
super.onResume();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
//Find the currently focused view, so we can grab the correct window token from it.
//If no view currently has focus, create a new one, just so we can grab a window token from it
imm.hideSoftInputFromWindow(etBarcode.getWindowToken(), 0);
}
}, 500);
}
它隐藏了它(很快就出现了)。
EditText
上是否有可用于防止键盘弹出的事件?或者其他一些阻止它显示的方式?
更新 focusableInTouchMode
无法满足我的需求,因为当设置为true
键盘弹出时,设置为false
时无法关注所有。
答案 0 :(得分:3)
// Add following code in activity onCreate
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 1 :(得分:0)
对于父版面android:focusableInTouchMode="true"
答案 2 :(得分:0)
您可以设置布局的属性,如
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
答案 3 :(得分:0)
问题非常复杂,因为它是关于获得焦点的视图,以及所有布局如何处理它,关于触摸模式是可聚焦的,以及最后但并非最不重要的软键盘处理方式。 但这对我有用:
在清单中:
android:windowSoftInputMode="stateHidden|stateAlwaysHidden"
布局:
android:focusable="true"
android:focusableInTouchMode="true"
最后但并非最不重要的是,触摸侦听器设置为EditText以防止软键盘在触摸后显示:
mMyText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// forward the touch event to the view (for instance edit text will update the cursor to the touched position), then
// prevent the soft keyboard from popping up and consume the event
v.onTouchEvent(event);
disableSoftKeyboard(MyActivity.this);
return true;
}
});
虽然该方法或多或少地做了你正在做的事情:
public void disableSoftKeyboard(@NonNull Activity activity) {
View view = activity.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
} else {
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
}
希望它有所帮助,而且我没有忘记任何事情:)