return true 时键盘未显示在 EditText 上
Keyboard not showing up on EditText when return true
所以我在 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
将显示键盘。但在您的第一个订单自定义 OnTouchListener
中返回 true
可以防止
所以我在 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
将显示键盘。但在您的第一个订单自定义 OnTouchListener
中返回 true
可以防止