所以我在onCreate
中添加了这些行,这样当我单击或触摸EditText时,它就会执行doSomething
中指定的操作。问题是,使用下面给出的代码,在执行doSomething
之后,键盘不会出现。如果我删除If块中的return true
,那么它可以工作,但我不明白如果包含这一行,为什么它不能工作。那么为什么会发生这种情况呢?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
doSomething(editText);
return true;
}
return false;
}
});
}
发生这种情况是因为键盘将显示MotionEvent.ACTION_UP
何时由EditText
本身处理(而不是您的自定义OnTouchListener
(,所以您的onTouch
应该是return false
,然后是
一般来说,onTouch
返回的标志会通知框架您已经处理了事件——当您返回true
时,该事件将不会进一步传播(正如已经处理的那样,"被消耗"(。如果返回了false
,则事件仍将传播到此View
(并在后台处理,请查看特定的源如何处理(,如果View
的默认实现不处理此操作以及return false
,则甚至传播到其父级
EditText
的情况并非如此——它正在处理所有事件,就像第一段中一样——ACTION_UP
将显示键盘。但是在您的第一个订单中返回true
自定义OnTouchListener
会阻止