返回true时,键盘未显示在EditText上



所以我在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会阻止

最新更新