Android 以编程方式更改带有文本的按钮的图层列表中形状的颜色
我正在尝试创建一个包含文本和图像的圆形按钮。我想以编程方式将其添加到活动中,同时更改背景颜色 下面的工作正常,但没有图像。 按钮_round.xml:Android 以编程方式更改带有文本的按钮的图层列表中形状的颜色,android,android-layout,android-activity,android-xml,Android,Android Layout,Android Activity,Android Xml,我正在尝试创建一个包含文本和图像的圆形按钮。我想以编程方式将其添加到活动中,同时更改背景颜色 下面的工作正常,但没有图像。 按钮_round.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:id="@+id/button_round_oval">
<shape android:shape="oval"
android:id="@+id/button_round_oval_shape">
<solid android:color="#52a0e8"/>
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="#3280c8"/>
</shape>
</item>
</selector>
我搜索了一个解决方案,但无法使其工作(例如,here:)
以下是我迄今为止所尝试的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:id="@+id/button_round_oval">
<layer-list
android:id="@+id/button_round_oval_layer">
<item
android:id="@+id/button_round_oval_item">
<shape
android:shape="oval"
android:id="@+id/button_round_oval_shape">
<solid android:color="#52a0e8"/>
</shape>
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/stars_one" />
</item>
</layer-list>
</item>
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="#3280c8"/>
</shape>
</item>
</selector>
但在这种情况下,我会收到一条错误消息:
android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.LayerDrawable
第二个问题是(当这起作用时),如何更改所按下状态的背景色
提前谢谢
LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getApplicationContext(), R.drawable.button_round);
GradientDrawable bgShape = (GradientDrawable) layerDrawable
.findDrawableByLayerId(R.id.button_round_oval_item);
bgShape.setColor(Color.parseColor("#0000FF"));
android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.LayerDrawable