尝试获取按钮的背景颜色时出现 java.lang.ClassCastException
Posted
技术标签:
【中文标题】尝试获取按钮的背景颜色时出现 java.lang.ClassCastException【英文标题】:java.lang.ClassCastException when trying to get background color of a button 【发布时间】:2017-03-26 13:58:38 【问题描述】:我希望在单击按钮时获取它的背景颜色。如果背景颜色与名为 "blue_color" 的资源中的颜色相同,则将背景设置为透明。否则将其设置为 “蓝色_颜色”。我已经尝试过here 提到的方法,但它给了我错误。
代码:
btn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
ColorDrawable btc = (ColorDrawable) btn.getBackground();
int colorId = btc.getColor();
if(colorId == R.color.blue_color)
btn.setBackgroundColor(Color.TRANSPARENT);
else
btn.setBackgroundColor(getResources().getColor(R.color.blue_color));
);
来自 logcat 的错误:
致命异常:主要 java.lang.ClassCastException: android.graphics.drawable.InsetDrawable 不能转换为 android.graphics.drawable.ColorDrawable
在
所在的那一行ColorDrawable btc = (ColorDrawable) btn.getBackground();
【问题讨论】:
颜色永远不会是R.color.blue_color
,因为R.color.blue_color
不是颜色。它是颜色资源的标识符。我建议您使用单独的boolean
或其他字段来跟踪按钮的状态。
【参考方案1】:
你应该使用btn.getBackground().getColor();
在您的代码中,您将获得一个可绘制的... 所以该行应该是:
ColorDrawable btc = (ColorDrawable) btn.getBackground().getColor();
编辑:您可以从这样的资源中获取颜色的 int id:
int alpha = ... // 0-255
int blueColor = ResourcesCompat.getColor(getResources(), R.color.blue_color, null);
int blueColorWithAlpha = Color.argb(
alpha,
Color.red(blueColor), Color.green(blueColor), Color.blue(blueColor) );
颜色的 id 现在是 blueColorWithAlpha
,因此您可以将其与按钮之一进行比较。要获取按钮的颜色 id,您可以这样做:int color = ((ColorDrawable)button.getBackground()).getColor();
我没有测试过这段代码,但做了一些搜索,在***上找到了这些sn-ps...
【讨论】:
我不能使用 ColorDrawable btc = (ColorDrawable) btn.getBackground().getColor();有一条消息说“无法解析方法'getColor” 试试这个:可绘制背景 = btn..getBackground(); if (background instanceof ColorDrawable) Color color = ((ColorDrawable) background).getColor(); 必需的 android.graphics.Color ,在 Color 中找到 int color = ((ColorDrawable) background).getColor();以上是关于尝试获取按钮的背景颜色时出现 java.lang.ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章
在服务类中添加权限以获取位置时出现 java.lang.ClassCastException
获取位置时出现 java.lang.NullPointerException
尝试读取 .xlsm 文件时出现 java.lang.NoSuchMethodError