鍍金池/ 問(wèn)答/Java  Android/ 安卓事件傳遞問(wèn)題

安卓事件傳遞問(wèn)題

出現(xiàn)一個(gè)很困擾的問(wèn)題。
當(dāng)我滑動(dòng)側(cè)邊欄更改主頁(yè)面的viewgroup之后,更改完畢的viewgroup中控件的點(diǎn)擊事件失效了。
只有當(dāng)我滑動(dòng)側(cè)邊欄再滑動(dòng)一點(diǎn)之后才能夠“激活”,該viewgroup中的控件才能夠被點(diǎn)擊。
在8.0的系統(tǒng)中沒(méi)有這個(gè)問(wèn)題,7.0或以下卻有這個(gè)問(wèn)題。
在我debug來(lái)看,當(dāng)事件從側(cè)邊欄傳遞進(jìn)去到主頁(yè)面viewgroup的時(shí)候,主頁(yè)面viewgroup并沒(méi)有攔截事件,卻出現(xiàn)事件的回傳,也就是子控件或者子view并沒(méi)有消費(fèi)事件,更大可能是沒(méi)有了子view。
但在8.0的系統(tǒng)中,這個(gè)事件切實(shí)地被子view消費(fèi),當(dāng)事件是Up的時(shí)候就會(huì)觸發(fā)子view的監(jiān)聽(tīng)方法。

這個(gè)問(wèn)題要怎么解決?

紅色的標(biāo)記是我期望的事件傳遞

詳細(xì)流程:
紅色的標(biāo)記是我期望的事件傳遞,但事件傳遞到SlideMenu中,然后再傳遞到Mylineralayout的onInterceptTouchEvent方法之后,明明是返回false,理應(yīng)傳遞到我點(diǎn)擊的button中,但是事件卻回傳會(huì)到Mylineralayout的onTouchEvent中,導(dǎo)致這個(gè)事件down之后的事件up在Mylineralayout的onTouchEvent中自行處理觸發(fā)不了Button的onclick事件。

在8點(diǎn)0的系統(tǒng)中卻是不存在這個(gè)問(wèn)題。當(dāng)我點(diǎn)擊SlideMenu的item更換Mylineralayout中的布局,這些布局中的控件是能夠被我點(diǎn)擊的。在7點(diǎn)0或以下的系統(tǒng)的卻需要我滑動(dòng)一點(diǎn)點(diǎn)SlideMenu之后事件傳遞才會(huì)正常。

回答
編輯回答
心夠野

事件的傳遞會(huì)始終遵守:Activity -> ViewGroup -> View這樣的分發(fā)順序,事件消費(fèi)攔截相關(guān)想必你已經(jīng)清楚了,既然出現(xiàn)這樣的問(wèn)題。說(shuō)明父子關(guān)系發(fā)生了改變,嘗試用HierarchyViewer + Debug查看是否確實(shí)在7.0和8.0機(jī)型上視圖嵌套出現(xiàn)了不一致的情況。如果確實(shí)一致,8.0是否使用了測(cè)試版本,測(cè)試版本可能存在一些Bug。

2017年8月2日 13:10