所以我在里面加了这些线 onCreate
这样,当我单击或触摸edittext时,它将执行中指定的操作 doSomething
. 问题是在执行以下代码之后 doSomething
键盘没有出现。如果我移除 return true
在if块中,它就可以工作了,但是我不明白如果包含这一行,它为什么不能工作。为什么会这样?
@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;
}
});
}
1条答案
按热度按时间slsn1g291#
这是因为键盘会显示
MotionEvent.ACTION_UP
将由处理EditText
本身(不是你的习惯OnTouchListener
),所以你的onTouch
应该return false
然后返回的一般标志
onTouch
在返回时通知框架您已经处理了事件true
那么这个事件就不会被进一步传播了(正如已经处理过的,“消费”)。如果false
返回的事件仍将传播到此View
(并在引擎盖下处理,查看特定来源如何)或甚至到其父级,如果默认执行View
不处理此操作return false
这不是一个简单的例子EditText
-它正在处理所有事件,就像第一段中那样-ACTION_UP
将显示键盘。但是回来了true
在你的第一个订单中OnTouchListener
防止那样