更改ImageButton在运行时声明背景颜色

时间:2013-10-04 11:10:52

标签: android background runtime imagebutton

我需要在运行时更改选择器中的颜色,我需要将其应用于4个不同的按钮。

这是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>

我需要更改两种纯色,我不知道如何访问它们。我已经尝试过访问背景图像按钮但没有任何反应。

3 个答案:

答案 0 :(得分:1)

创建另一个具有所需颜色的state_corners并根据需要更改drawable

答案 1 :(得分:0)

您无法获取StateListDrawable的状态,因此无法对其进行修改(除非您使用默认的ctor和addState()方法创建了SLD),但您始终可以创建新的SLD和addState()s

答案 2 :(得分: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