我制作了FragmentActivity。一些片段包含EditText
。
我想,当软输入键盘启动并且MotionEvent
发生时 - 除了在EditText内部单击的事件 - 要隐藏的软输入。到目前为止,我在MainActivity中编写了这段代码:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
InputMethodManager im = (InputMethodManager) getApplicationContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
return super.dispatchTouchEvent(ev);
}
似乎有效。但是当我在EditText中单击时,它会隐藏并再次出现。我不希望这种情况发生。在这种情况下,我希望键盘只是留在屏幕上。
当我点击片段内的EditText时,有没有办法以某种方式禁用dispatchTouchEvent()
?
有没有办法检测dispatchTouchEvent()
内的EditText的click事件并在那里创建条件,这会禁用隐藏的软输入?
答案 0 :(得分:8)
由于dispatchTouchEvent()是在屏幕上发生触摸时调用的第一个方法,因此您需要查找触摸是否属于编辑文本视图的范围。 你可以得到触点, int x = ev.getRawX(); int y = ev.getRawY();
检查它是否属于editText
的范围的方法boolean isWithinEditTextBounds(int xPoint, int yPoint) {
int[] l = new int[2];
editText.getLocationOnScreen(l);
int x = l[0];
int y = l[1];
int w = editText.getWidth();
int h = editText.getHeight();
if (xPoint< x || xPoint> x + w || yPoint< y || yPoint> y + h) {
return false;
}
return true;
}
在你的onDispatchTouch()中。
if(isWithinEditTextBounds(ev.getRawX,ev.getRawY))
{
//dont hide keyboard
} else {
//hide keyboard
}