我有一个带有listview的活动,每行都有几个editText。它看起来像一份调查问卷。 我有一个EditText的焦点,然后我点击另一个EditText。此刻,键盘消失并重新出现。这很刺激。
当用户在不想输入活动时点击活动的任何其他位置时,我会使用该代码使键盘失效。但是如果用户点击另一个editText,我希望键盘保持不变。
有人知道键盘是否已经显示,点击EditText时如何保持键盘打开?
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
View w = getCurrentFocus();
if (w instanceof EditText) {
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
float x = event.getRawX() + w.getLeft() - scrcoords[0];
float y = event.getRawY() + w.getTop() - scrcoords[1];
if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(event);
}
答案 0 :(得分:0)
确保您在android:inputType
声明中使用XML设置EditText
。如果这不能解决问题,您可以使用View
类的android:nextFocusUp
,android:nextFocusDown
,android:nextFocusRight
或android:nextFocusLeft
来指定下一个焦点下一个EditText
移动到。
最后,它可能与ListView
处理焦点的方式有关。如果是这种情况,那么可能值得关注的是相关问题here。
答案 1 :(得分:0)
如果您可以分享您的代码,将会很有帮助。
我认为发生的事情是,当您点击另一行上的另一个时,您的列表视图会导致您的编辑文字失去焦点。
通常,您可以做的是在编辑文本上注册焦点更改侦听器,然后每次编辑文本失去焦点时,您都可以运行一个功能来再次显示键盘。
replyInputEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
showKeyboard(editText);
}
});
showkeyboard功能:
public void showKeyboard(EditText field){
field.setFocusable(true);
field.setFocusableInTouchMode(true);
field.requestFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.getApplicationContext().INPUT_METHOD_SERVICE);
imm.showSoftInput(field, InputMethodManager.SHOW_IMPLICIT);
}
您还可以在文本字段上注册ontouchup侦听器,然后调用showKeyboard函数。