Java 返回true时,键盘未显示在EditText上
因此,我在Java 返回true时,键盘未显示在EditText上,java,android,android-edittext,Java,Android,Android Edittext,因此,我在onCreate中添加了这些行,这样当我单击或触摸编辑文本时,它就会执行doSomething中指定的操作。问题在于,使用下面显示的代码,在执行doSomething后,键盘不会显示。如果我删除If块中的return true,那么它可以工作,但我不明白如果包含这一行,为什么它不能工作。那么为什么会发生这种情况呢 @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea
onCreate
中添加了这些行,这样当我单击或触摸编辑文本时,它就会执行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时显示。动作将由EditText
本身处理(不是您的自定义onTouch侦听器
),因此您的onTouch
应该返回false
通常,onTouch
返回的标志通知框架您已经处理了事件-当您返回true
时,该事件将不会进一步传播(正如已经处理的,“已消耗”)。如果返回了false
,则事件仍将传播到此视图(并在引擎盖下进行处理,请查看特定的源代码)或甚至传播到其父级(如果视图的默认实现未处理此操作,并且返回false
这不是EditText
的情况-它正在处理所有事件,就像在第一段中一样-ACTION\u UP
将显示键盘。但是在您的第一个命令中返回true
,以自定义OnTouchListener
防止true
意味着触摸被处理。你可以从我对安卓和java还很陌生的经历中看到更多的东西,所以它并没有澄清太多。您的链接是这样的:如果侦听器已使用事件,则为True,否则为false。据我所知,我必须返回true
才能让应用程序继续运行,否则我会认为它会卡在本文中。相反,情况正好相反。不,如果返回true,onTouch将不会继续调用超级方法。如果返回false,onTouch将继续调用超级函数。谢谢,这很有帮助。我可以编辑你的答案吗?因为这对我来说有点困难,所以我的编辑可以帮助我这个级别的其他人理解它。嗯,你总是可以的,但是必须有更多的人(版主)批准它。如果你想改变整个句子和所有的意思(甚至简化),那么你的改变将不会被接受,因为这将是你的答案,而不是我的。。。