我正在尝试更改Handmade circle.xml类的颜色,但我不能,而且我无法理解背后的原因。
我很确定我使用了错误的方法来做到这一点。
这是一些代码。这是一个onClick()方法,它应该改变我的圆形可绘制“按钮”的颜色。
Circle.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#e42828"/>
<stroke android:color="#3b91d7" android:width="0dp"/>
<size android:width="250dp" android:height="250dp"/>
</shape>
</item>
</selector>
Activity.java
recplay_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GradientDrawable background = (GradientDrawable)recplay_button.getBackground();
background.setColor(getResources().getColor(R.color.accent));
}
});
好的,这是例外:
03-16 22:09:46.546 18305-18305/com.example.cesarsk.say_it E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.cesarsk.say_it, PID: 18305
java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.GradientDrawable
at com.example.cesarsk.say_it.PlayActivity$3.onClick(PlayActivity.java:160)
at android.view.View.performClick(View.java:5669)
at android.view.View$PerformClick.run(View.java:22539)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6290)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Xml定义了我的按钮:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/buttons_bar">
<Button
android:id="@+id/recplay_button"
android:layout_width="96dp"
android:layout_height="96dp"
android:background="@drawable/circle"
android:backgroundTint="@color/primary_dark"
android:layout_centerInParent="false"
/>
</RelativeLayout>
我认为它不起作用的原因与我手动创建Shape的事实有关,所以我没有办法让自己与它接口。
起初,我试图做
`View v = findViewById(R.id.rect4);
v.setBackground(R.drawable.rectangle);
并且颜色发生了变化,但它也改变了我的形状,所以我不能使用它,或者我应该以不同的方式使用它。
谢谢大家。
答案 0 :(得分:1)
尝试使用
替换onClickListner中的代码~/.gitignore
答案 1 :(得分:0)
如果您使用api 23&gt; getColor()
已被弃用。相反,有
getColor(int id,Theme theme)
。或者在你的情况下ContextCompat.getColor(context, R.color.color_name)
你也没有提到你是否想要改变颜色onClick
,因为如果你不需要setOnClickListener
即使不推荐使用getColor,最终答案如果你只是更正了
,它也会在你的代码中起作用GradientDrawable background =(GradientDrawable)button1.getBackground().getCurrent();
它对我有用