繁体   English   中英

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

[英]setting color instead of drawable in selector causes crash

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

我很累像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给了我一个警告,说“颜色”是必需的

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

尝试这个:

可绘制的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。

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

这是他们提供的示例。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM