2013-10-04 34 views
0

我需要從一個選擇改變任何運行時顏色背景顏色和我需要將其應用到4個不同的按鈕。變化的ImageButton狀態運行時

這裏是ImageButton的代碼:

<ImageButton 
    android:id="@+id/buttonAgenda" 
    android:layout_width="100dp" 
    android:layout_height="100dp"   
    android:background="@drawable/drawable_button_states_corners" 
    android:src="@drawable/boton_agenda_1"/> 

的drawable_button_states_corners:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true"> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <solid android:color="@color/galicia2"/>  
     <corners 
      android:bottomRightRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topLeftRadius="10dp" 
      android:topRightRadius="10dp"/> 
    </shape>   
</item> 
<item android:state_enabled="true"> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <solid android:color="@color/galicia"/>  
     <corners android:bottomRightRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topLeftRadius="10dp" 
      android:topRightRadius="10dp"/> 
    </shape> 
</item> 
</selector> 

我需要改變兩者純色,我不知道如何存取權限它們。我已經嘗試訪問背景的圖像按鈕,但沒有任何反應。

回答

1

創建所需的另一種顏色的state_corners,並根據需要

+0

怎麼辦創建顏色狀態列表我改變drawables?我正在設置背景,這是我設置drawable的地方,但它不會改變,事實上,它將失去默認的drawable – n4h1n

0

你不能得到StateListDrawable的所以它不可能修改它的狀態(除非你創建SLD使用默認的構造函數和addState()方法),但你總是可以創建一個新的SLD和addState()■

0

據我所知,以達到你想要什麼,你必須在運行時創建形狀繪製,然後你可以創造狀態列表設置爲背景變化可繪製。您可以在運行時創建形狀繪製與此代碼

ShapeDrawable footerBackground = new ShapeDrawable(); 

// The corners are ordered top-left, top-right, bottom-right, 
// bottom-left. For each corner, the array contains 2 values, [X_radius, 
// Y_radius] 
float[] radii = new float[8]; 
radii[0] = activity.getResources().getDimension(R.dimen.footer_corners); 
radii[1] = activity.getResources().getDimension(R.dimen.footer_corners); 

radii[2] = activity.getResources().getDimension(R.dimen.footer_corners); 
radii[3] = activity.getResources().getDimension(R.dimen.footer_corners); 

footerBackground.setShape(new RoundRectShape(radii, null, null)); 

int color = ((Application) activity.getApplication()).getColor(); 

footerBackground.getPaint().setColor(color); 

views.setBackgroundDrawable(footerBackground); 

這部分是從公認的答案就這項所以張貼Android: Change Shape Color in runtime

參考文檔關於在運行時http://developer.android.com/reference/android/content/res/ColorStateList.html