2010-10-04 70 views
7

我正在使用Gallery視圖,其中與每個項目對應的視圖不平凡,並且包含文本以及多個按鈕。Gallery/AdapterView兒童可繪製狀態

當我點擊拖動圖庫視圖(而不是在某處的一個按鈕)按鈕的繪製狀態更改爲壓制又彷彿所有的按鈕,目前正在按出現。此外,所選狀態也會發生相同的行爲(例如,子視圖TextView的所有文本都會改變顏色)。

我試圖阻止這種行爲,並已發現了android:duplicateParentState XML屬性還有setDuplicateParentStateEnabled財產。這似乎應該完成我想要做的事情,但它似乎沒有效果。

任何想法?

回答

3

不知道其中duplicateParentState產權進場,而是通過源突破錶明,這是從來沒有考慮到所選擇的和壓制的狀態。我會創建一個自定義視圖類,並重寫dispatchSetSelected和dispatchSetPressed方法。

8

也許有點就在身邊晚,但最近剛碰到這個問題,我自己有一個修復。

dispatchSetSelected和dispatchSetPressed真的不幫助這裏,因爲你確實需要覆蓋的方法是內廊私人。

的解決方案是添加一個額外的佈局(I使用的LinearLayout的子類)周圍的子視圖,它覆蓋setPressed(布爾值)和簡單地忽略它。這樣可以防止畫廊強迫孩子按下自己的狀態,同時仍然允許孩子直接被激活,並且不會阻止事件向上傳播。

+0

This Works。非常感謝! – yuku 2011-01-29 18:36:30

+0

驚人的修復!有誰知道這是否是一個報告的Android錯誤?似乎不是真正的預期行爲。 – MikeIsrael 2012-01-19 15:44:29

1

如果你碰巧從庫擴展到創建它自己的定製版本,你可以簡單地做:

@Override 
    public boolean onDown(MotionEvent e) { 
    // Ignore onDown events in order to avoid having every child's state set to 'pressed' 
    return true; 
    } 

將仍然允許自定義庫的孩子正確地接收點擊事件,和刷卡/甩按預期工作。