Nic*_*sen 5 android attr android-theme android-selector
selector我的应用程序中有一个项目用作列表视图行的背景颜色。关键是该行在被点击/触摸时会改变颜色。
因此,选择器使用两个可绘制对象,一个用于按下状态,一个用于常规。文件:rowbgselector.xml在文件夹中res/color:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rowbg_shape_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/rowbg_shape" />
</selector>
Run Code Online (Sandbox Code Playgroud)
引用的两个可绘制对象定义res/drawable为具有纯色的简单矩形形状:
文件rowbg_shape.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/row_bg"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
文件rowbg_shape_selected.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="?attr/colorAccent"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
这适用于 Lollipop 设备,但在 Lollipop 之前的任何设备上都失败,并出现一个没有说明太多的错误:
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/rowbg_shape_selected.xml from drawable resource ID #0x7f02006c
我认为问题在于这是 Lollipop 中修复的错误,请参见此处:https : //code.google.com/p/android/issues/detail?id=26251
问题是我试图引用attr/colorAccent当然在我的主题中定义的。我有几个不同颜色的主题,用户可以从中选择,并且attr/colorAccent每个主题都不同。然而,似乎由于棒棒糖之前的这个错误,你不能在选择器中引用这样的属性......
我的替代选择是什么?我能想到的唯一选择是为每个主题创建一个单独的选择器 xml 文件,并添加类似的内容attr/bg_selector,然后为每个主题引用正确的选择器文件。这将花费我很长时间,更进一步,更改此选择器的任何内容将需要大量工作(如果稍后我想让颜色稍微变暗或变亮,我将不得不浏览所有这些文件......)。
没有其他选择了吗?
TL;DR:恐怕你是对的,在 Lollipop 之前没有其他方法可以解决这个问题。
我遇到了这个问题,正在寻找与内置选择器之一相关但不同的问题的答案(即它与和activatedBackgroundIndicator相关)。就我而言,一种巧妙的解决方法是在共享库中定义颜色资源,然后在每个应用程序中定义同名的颜色资源。我不认为棒棒糖之前支持的主题有类似的东西。colorControlActivatedcolorAccent
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |