2012-06-21 78 views
1

這是我的代碼:如何設置的圖像作爲背景使用StateListDrawable(動態或程序或通過代碼)一個按鈕

public void setHoverEffect(final Button button,int normalImageId, int hoverImageId) { 
     if (button != null) 
     { 
      StateListDrawable stateListDrawable = new StateListDrawable(); 
      stateListDrawable.addState(new int[]{ }, getResources().getDrawable(normalImageId)); 
      stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, getResources().getDrawable(hoverImageId)); 
      button.setBackgroundDrawable(stateListDrawable); 
     } 
} 

當我使用上面的代碼只有正常圖像被顯示爲背景當我按下按鈕時,它不顯示懸停圖像。

當我使用selector.xml文件,如下圖所示,並設置爲背景,做工精細。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/btn_ok_h"> </item> 
    <item android:drawable="@drawable/btn_ok"> </item> 
</selector> 

我想動態地做到這一點,以避免爲我的應用程序中的每個按鈕創建選擇器XML文件。我想不出它在哪裏我的代碼錯了或者我必須指定額外的屬性... :(

回答

6

@KK你正在做正確的方式與一些錯誤

看到我的代碼

public void selector(Button b,int pressed_image,int normal_image) 
    { 
     StateListDrawable states = new StateListDrawable(); 
     states.addState(new int[] { android.R.attr.state_pressed }, getResources().getDrawable(pressed_image)); 
     states.addState(new int[] {}, getResources().getDrawable(normal_image)); 
     b.setBackgroundDrawable(states); 
    } 

你可以說這個代碼是相同的代碼,但也有一些差異。 我已經寫了states.addState(new int[] { android.R.attr.state_pressed }, getResources().getDrawable(pressed_image));前行states.addState(new int[] {}, getResources().getDrawable(normal_image));

第一次嘗試這個代碼,我已經測試此代碼4-5次,然後張貼在這裏。我真的不知道爲什麼改變行代碼工作正常。

+0

感謝ü非常........................................... ..............................你讓我的一天........... :) :) –

+0

順序是不同的。視圖將匹配符合當前視圖狀態的第一個可繪製狀態 – jerry

相關問題