0

我需要在运行时从选择器中更改颜色,并且需要将其应用于 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>

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

4

3 回答 3

1

创建另一个具有所需颜色的 state_corners 并根据需要更改可绘制对象

于 2013-10-04T11:39:06.363 回答
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

于 2013-10-04T11:46:55.170 回答
0

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

于 2013-10-04T11:36:03.380 回答