2012-10-05 82 views
4

我有一個ListView,裏面有自定義元素。我想爲每個元素創建選擇器。選擇器本身不會很複雜,因爲它們只需處理背景顏色,而項目懸停/選定/等等。然而,這些選擇器的顏色必須來自外部來源,我需要能夠從變量中設置它們,所以一些簡單的靜態代碼將無法做到。
動態定義和使用選擇器

  1. 如何與所有它`參數編程的方式定義部門?
  2. 如何以編程方式將該選擇器分配給特定視圖?

回答

12
StateListDrawable states = new StateListDrawable(); 
int yourBackgroundColor = Color.parseColor("#FFFFFF"); 
// Add specific color when your view has state 'pressed' 
states.addState(new int[] {android.R.attr.state_pressed}, new ColorDrawable(yourBackgroundColor)); 
// Add other states wanted and associated drawable 
// ... 
// As StateListDrawable extend Drawable, you can use it as background for exemple  
yourView.setBackground(states); 

,只要你想進入你的StateListDrawable(:http://developer.android.com/guide/topics/resources/color-list-resource.html可用狀態的列表)您可以添加狀態爲多。 對於每種狀態組合,您可以設置特定的和動態的可繪製的。

可以指定多個狀態相匹配的繪製

states.addState(new int[] { -android.R.attr.state_focused, 
          android.R.attr.state_selected, 
          -android.R.attr.state_pressed}, ColorDrawable(yourBackgroundColor)); 

這個時候如果你的觀點不集中的顏色將被應用,選擇並沒有按下。

-1
StateListDrawable states = new StateListDrawable(); 
int yourBackgroundColor = Color.parseColor("#FFFFFF"); 
// Add specific color when your view has state 'pressed' 
states.addState(new int[] {android.R.attr.state_pressed}, 
     new ColorDrawable(yourBackgroundColor)); 
// Add other states wanted and associated drawable 
// ... 
// As StateListDrawable extend Drawable, you can use it as background for exemple  
yourView.setBackground(states);