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 可以防止