Selector在drawable和color目录下使用的规范

  上个星期项目运行在4.3的机子上出了一个很奇怪的bug,就是到了指定页面就会崩溃,而其他的页面并不会出现这个问题,log日志打印打印如下:

android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
...

  报错的地方在该页面的adapter的inflate布局处,而且是在第二行,这就让我一脸懵逼,我的根布局就是使用的是一个简简单的相对布局,也不是什么自定义的布局。而且试遍了公司所有的测试机,仅仅在这个sansong的机子上有问题。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/recycler_item_click_selector"
                android:paddingLeft="13dp"></RelativeLayout>

  后来在网上找寻解决方案,但是最终却没有找到办法解决这个bug,就当我快要放弃的时候,公司的老大说他貌似知道哪里的问题,他说他之前也踩过这个坑。没错就是我的跟布局的background属性的这个自定义条目点击背景,修改之前我是这么写的:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/background_item"/>
    <item android:drawable="@color/white"/>
</selector>

  可以看到我的drawable文件引用的时候@color中的资源颜色资源,当然基础扎实的人可能不会这么写,我这个小菜鸟就在这里栽了坑。借此机会也学习了一下到底如何规范使用颜色selector和drawable的selector。

  1. selector作为drawable资源时,放于drawable目录下,并且item指定android:drawable属性,并drawable资源引用使用@drawable
    而不是@color(虽然这样编辑器并不会报错,但是不推荐这么做,避免指定机型出bug)
  2. selector作为color资源时,item指定android:color属性,并放于color目录下。
  3. res/values/colors中的条目即可以使用<color name="colorAccent">#FF4081</color>也可以使用<drawable
    name="white">#ffffffff</drawable>

所以修复完成后应该改成:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/background_item"/>
    <item android:color="@color/white"/>
</selector>

并将该selector放在color文件夹下,本布局中引用换成

android:background="@color/recycler_item_click_selector"
<color name="white">#FFFFFF</color> - <!-- 白色 --> <color name="ivory">#FFFFF0</color> - <!-- 象牙色 --> <color name="lightyellow">#FFFFE0</color> - <!-- 亮黄色 --> <color name="yellow">#FFFF00</color> - <!-- 黄色 --> <color name="snow">#FFFAFA</color> - <!-- 雪白色 --> <color name="floralwhite">#FFFAF0</color> - <!-- 花白色 --> <color name="lemonchiffon">#FFFACD</color> - <!-- 柠檬绸色 --> <color name="cornsilk">#FFF8DC</color> - <!-- 米绸色 --> <color name="seashell">#FFF5EE</color> - <!-- 海贝色 --> <color name="lavenderblush">#FFF0F5</color> - <!-- 淡紫红 --> <color name="papayawhip">#FFEFD5</color> - <!-- 番木色 --> <color name="blanchedalmond">#FFEBCD</color> - <!-- 白杏色 --> <color name="mistyrose">#FFE4E1</color> - <!-- 浅玫瑰色 --> <color name="bisque">#FFE4C4</color> - <!-- 桔黄色 --> <color name="moccasin">#FFE4B5</color> - <!-- 鹿皮色 --> <color name="navajowhite">#FFDEAD</color> - <!-- 纳瓦白 --> <color name="peachpuff">#FFDAB9</color> - <!-- 桃色 --> <color name="gold">#FFD700</color> - <!-- 金色 --> <color name="pink">#FFC0CB</color> - <!-- 粉红色 --> <color name="lightpink">#FFB6C1</color> - <!-- 亮粉红色 --> <color name="orange">#FFA500</color> - <!-- 橙色 --> <color name="lightsalmon">#FFA07A</color> - <!-- 亮肉色 --> <color name="darkorange">#FF8C00</color> - <!-- 暗桔黄色 --> <color name="coral">#FF7F50</color> - <!-- 珊瑚色 --> <color name="hotpink">#FF69B4</color> - <!-- 热粉红色 --> <color name="tomato">#FF6347</color> - <!-- 西红柿色 --> <color name="orangered">#FF4500</color> - <!-- 红橙色 --> <color name="deeppink">#FF1493</color> - <!-- 深粉红色 --> <color name="fuchsia">#FF00FF</color> - <!-- 紫红色 --> <color name="magenta">#FF00FF</color> - <!-- 红紫色 --> <color name="red">#FF0000</color> - <!-- 红色 --> <color name="oldlace">#FDF5E6</color> - <!-- 老花色 --> <color name="lightgoldenrodyellow">#FAFAD2</color> - <!-- 亮金黄色 --> <color name="linen">#FAF0E6</color> - <!-- 亚麻色 --> <color name="antiquewhite">#FAEBD7</color> - <!-- 古董白 --> <color name="salmon">#FA8072</color> - <!-- 鲜肉色 --> <color name="ghostwhite">#F8F8FF</color> - <!-- 幽灵白 --> <color name="mintcream">#F5FFFA</color> - <!-- 薄荷色 --> <color name="whitesmoke">#F5F5F5</color> - <!-- 烟白色 --> <color name="beige">#F5F5DC</color> - <!-- 米色 --> <color name="wheat">#F5DEB3</color> - <!-- 浅黄色 --> <color name="sandybrown">#F4A460</color> - <!-- 沙褐色 --> <color name="azure">#F0FFFF</color> - <!-- 天蓝色 --> <color name="honeydew">#F0FFF0</color> - <!-- 蜜色 --> <color name="aliceblue">#F0F8FF</color> - <!-- 艾利斯兰 --> <color name="khaki">#F0E68C</color> - <!-- 黄褐色 --> <color name="lightcoral">#F08080</color> - <!-- 亮珊瑚色 --> <color name="palegoldenrod">#EEE8AA</color> - <!-- 苍麒麟色 --> <color name="violet">#EE82EE</color> - <!-- 紫罗兰色 --> <color name="darksalmon">#E9967A</color> - <!-- 暗肉色 --> <color name="lavender">#E6E6FA</color> - <!-- 淡紫色 --> <color name="lightcyan">#E0FFFF</color> - <!-- 亮青色 --> <color name="burlywood">#DEB887</color> - <!-- 实木色 --> <color name="plum">#DDA0DD</color> - <!-- 洋李色 --> <color name="gainsboro">#DCDCDC</color> - <!-- 淡灰色 --> <color name="crimson">#DC143C</color> - <!-- 暗深红色 --> <color name="palevioletred">#DB7093</color> - <!-- 苍紫罗兰色 --> <color name="goldenrod">#DAA520</color> - <!-- 金麒麟色 --> <color name="orchid">#DA70D6</color> - <!-- 淡紫色 --> <color name="thistle">#D8BFD8</color> - <!-- 蓟色 --> <color name="lightgray">#D3D3D3</color> - <!-- 亮灰色 --> <color name="lightgrey">#D3D3D3</color> - <!-- 亮灰色 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值