簡體   English   中英

返回 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會阻止這種情況

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM