EditText與父控件點擊事件衝突問題

正常情況下點擊EditText會彈出軟鍵盤輸入內容,但假設說有需求在某種情況下禁止EditText輸入內容,並且點擊的時候需要toast告訴用戶爲什麼不能輸入,這個時候你可能會想到給EditText設置setEnable(false),然後給他的父容器設置點擊事件,但是一旦你這樣做了,你就會發現給父容器設置點擊事件並不會觸發,這是爲什麼呢?
原因在於EditText的onTouchEvent始終返回true,儘管已經setEnable(false),這樣事件在EditText這裏就已經消費掉了,不會再傳給父容器了。

解決方案:

1 、自定義EditText 繼承 EditText,然後重寫onTouchEvent,return isEnabled() && super.onTouchEvent(event),這樣父容器的點擊事件就會起作用了

2 、不設置setEnable(false),因爲setEnable(false) 會導致setOnTouchListener不被觸發,而且還會接着走onTouchEvent, 然後我們給EditText設置onTouchListener 並且在需要的時候return true,在return true之前顯示我們自己的toast或處理其他邏輯,其他情況還返回false就可以了,這種情況不需要寫父容器點擊事件了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章