android點擊事件在不同級別view中的優先級問題

DexterDougl 8年前發布 | 6K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/0610/1622.html


   開發中很常見的一個問題,當項目中的listview不僅僅是簡單的文字,Item中存在諸如ImageButton,Button,CheckBox等子控件(也可以說是Button或者Checkable的子類控件),可能會發生點擊每一個item的時候沒有反應,無法獲取的焦點。 這是因為此時這些子控件會將焦點獲取到,所以常常當點擊item時變化的是子控件,item本身的點擊沒有響應。

   這時候就可以使用descendantFocusability屬性來解決,他可以設置一個控件如何處理觸摸事件,該屬性是當一個為view獲取焦點時,定義viewGroup和其子控件兩者之間的關系。

   屬性的值有三種:

beforeDescendants:viewgroup會優先其子類控件而獲取到焦點
afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點

   用法示例,下面的LinearLayout會屏蔽其中button的點擊事件:

<LinearLayout
    android:id="@+id/titlebar_right_tab"
    android:layout_width="55dip"
    android:layout_height="fill_parent"         
    android:gravity="center"
    android:background="@drawable/selector_tab"
    android:descendantFocusability="blocksDescendants"
>
    <Button
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:text="按鈕"
    />      
</LinearLayout>


   當然對于重寫了ontouchevent 或者 onintercepttouchevent 方法的自定義控件來說,這個屬性可能不會起作用。



 本文由用戶 DexterDougl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!