返回true时edittext上不显示键盘

ezykj2lf  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(324)

所以我在里面加了这些线 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;
            }
        });
    }
slsn1g29

slsn1g291#

这是因为键盘会显示 MotionEvent.ACTION_UP 将由处理 EditText 本身(不是你的习惯 OnTouchListener ),所以你的 onTouch 应该 return false 然后
返回的一般标志 onTouch 在返回时通知框架您已经处理了事件 true 那么这个事件就不会被进一步传播了(正如已经处理过的,“消费”)。如果 false 返回的事件仍将传播到此 View (并在引擎盖下处理,查看特定来源如何)或甚至到其父级,如果默认执行 View 不处理此操作 return false 这不是一个简单的例子 EditText -它正在处理所有事件,就像第一段中那样- ACTION_UP 将显示键盘。但是回来了 true 在你的第一个订单中 OnTouchListener 防止那样

相关问题