我需要在运行时更改选择器中的颜色,我需要将其应用于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>
我需要更改两种纯色,我不知道如何访问它们。我已经尝试过访问背景图像按钮但没有任何反应。
答案 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