Khotmanish,
我不知道你的意思通過最有效辦法。有很多方法非常快速,但它往往取決於你事先知道的事情和你不知道的事情。還必須瞭解的是,儘管流行的神話,動態視圖屬性被嚴重誤解,但高效。谷歌的人員在UI開發方面做得非常出色。
如果你知道它的時間提前,你可以簡單地創建一個StateListDrawable爲每個視圖,並將其應用到每個你通過你的適配器中運行。
要構建StateListDrawable,創建一個:
StateListDrawable _drawStates;
然後,對於每個狀態,添加您需要的繪製:
_drawStates.add(new int[] {android.R.attr.state_pressed}, _newImage);
這是你在getView以下行一樣簡單( )方法:
v.setBackgroundDrawable(_drawStates);
或者,您可以動態更改背景根據選擇。這可以在OnListItemClick()
中完成。你看,OnListItemClick()
會給你點擊的確切視圖。一旦你有了這個,你會發現它的id
孩子,並改變其性質和invalidate()
它。我使用這個技巧很多。爲我節省了大量的內存,但我沒有做任何真正的處理器密集型任務。幾乎沒有任何處理,你可以在這裏改變幾乎所有的房產這裏有一個例子:
@Override protected void onListItemClick(final ListView inList, final View v, final int atPos, final long rowID)
{//Get the Child, set the properties
ImageView _img = (ImageView)(v.findViewById(R.id.app_package));
_img.setBackgroundColor(myClickedColor);
_img.invalidate(); // <---- BEST Option
// ... OR ...
v.invalidate(); // <---- 2nd Best Option
// ... OR ...
inList.invalidate(); // <---- Last resort or specialized implementation
}
重要的是要注意,這樣做動態有一些注意事項,當涉及到背景顏色是很重要的。你必須從點擊的視圖中獲取子...不是ListView。其次,當改變背景顏色時,你實際上正在改變背景Drawables。這意味着所有其他「有狀態」屬性都會消失,並且您必須手動將其更改回來(如果您希望以此開始)。現在
,更受歡迎,但少了幾分靈活的方法是建立你StateListDrawable XML格式。有許多資源可以學習如何在Android開發者網站上執行此操作。
希望這有助於 FuzzicalLogic
」AFAIK我們不能在選擇器中應用樣式,有沒有更好的方法來處理這個問題而不是處理java代碼?如果你不能在選擇器中做到這一點,除Java之外還可以做什麼?也許你可以重寫默認選擇器引用的樣式屬性? – nmr 2012-03-15 03:21:56
樣式可用於更改背景顏色/ drawable.It無助於更改字體大小。我也需要爲每個子視圖指定選擇器嗎?在java代碼中,在getView()中。 – 2012-03-16 03:22:50