在选择器中设置颜色而不是可绘制会导致崩溃

时间:2018-10-31 00:33:52

标签: android

我想有一种根据视图状态更改颜色的背景颜色。

我很累像Google的示例一样创建它(除了我使用资源中的颜色而不是对十六进制值进行硬编码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:color="@color/transparent" />
    <item
        android:color="@color/gray_3"
        android:state_selected="true" />
</selector>

(位于res/color中)

然后将其设置为视图的背景。但是,当我运行代码时,出现此错误导致崩溃:

Binary XML file line #3: <item> tag requires a 'drawable' attribute or    child tag defining a drawable

这告诉我选择器中的“ item”标签需要drawable而不是color来定义颜色。

当我将其更改为可绘制对象时,例如:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable ="@color/transparent" />
    <item
        android:drawable ="@color/gray_3"
        android:state_selected="true" />
</selector>

该崩溃消失了,但是Android Studio给了我一个不起眼的警告,说需要“颜色”

我唯一的怀疑是也许我不应该将视图背景设置为颜色选择器

2 个答案:

答案 0 :(得分:0)

尝试一下:

可绘制的xml代码:-

像这样的透明色

 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape="rectangle" >
    <solid android:color="@android:color/transparent"" />
    <stroke
        android:width="1dp"
        android:color="@color/selected" />
    <corners android:radius="4dp" />
</shape>
  • 在颜色xml中定义@ color / selected。

答案 1 :(得分:0)

作为Google文档here,您不应在第一项中定义默认语句。

这是它们提供的示例。

Equals()

尝试使用十六进制颜色代码代替颜色值。