2011-11-15 62 views
1

我已經修改了列表視圖以具有不同的選擇顏色和項目背景。直到我在應用程序或活動背景(純色,png,漸變)上設置自定義顏色之前,事情都很完美。我也嘗試使用緩存顏色提示,但它似乎不工作。設置自定義背景覆蓋ListView自定義

我已經在谷歌幾乎整個昨天,並沒有找到答案。我來最近的是這thread

這位先生似乎說這是按設計。如果是這樣,我想聽聽如何改變整個列表視圖的背景顏色(我正在談論列表視圖中可能爲空的區域)。

如果你想看看一些代碼,你會發現它here

感謝 馬尼什

回答

2

我不是你的要求完全清楚,所以讓我解釋一切,你與工作一起玩的項目,也許你的答案將在那裏的某個地方。還有,你在你的問題已經描述了三種不同的視覺元素:

  • 列表選擇
  • 整體ListView的背景
  • 默認情況下,他們將被吸引

    1. 列表項的背景在該層次中,意義(1)繪製在(2)的頂部,(2)繪製在(3)的頂部,等等。在沒有自定義的ListView中,項目2是透明的,並且選擇器是具有多個狀態的可繪製的。正因爲如此,由於透明度的原因,您應用於Activity或ListView下的任何視圖的任何自定義顏色都將顯示出來。

      如果你看看這些東西的繪製順序,你可以開始看到如何定製一個元素可能會掩蓋對其他元素做的定製。例如,如果您在列表中的每個項目上設置了不透明的背景,並且listSelector屬性的列表已被完全隱藏(除非設置了drawSelectorOnTop ......這就是爲什麼當開發人員這樣做時,他們提供了可繪製狀態作爲背景項目)。

      ListView只是另一種視圖,如果您想爲整個ListView提供背景並隱藏其下面的視圖,您可以直接設置它的background屬性。同樣,如果您要設置自定義列表項目背景,除了ListView足夠大以顯示其所有元素並且其下方有額外空間的區域以外,這將不可見。

      cacheColorHint的工作是通過告訴每個列表項以純色背景(滾動時)而不是透明來繪製自己來優化滾動性能。如果您在ListView或Activity下面設置純色背景,則應將此值設置爲相同的顏色。如果你的背景是漸變或圖像,你不能使用這種優化,它應該設置爲透明(即#0000)

      希望有助於。

    +0

    非常感謝你Devenwired花時間。我理解listview呈現的順序是:_background_,_seperators_,_selector_,最後是_list items_。我已經注意讓我的物品背景和選擇器相應地透明。現在我有一個不同的問題 - 每件事情都按預期工作,我的自定義背景呈現爲我想要的樣子。但是,我沒有設置緩存顏色提示。所以在技術上,從我讀過的東西不應該工作。我有點困惑。 –