我的应用程序中有一个selector项目,用作列表视图行的背景色。 关键是当单击/触摸该行时颜色会改变。

因此,选择器使用两个可绘制对象,一个用于按下状态,另一个用于常规。 文件: res/color文件夹中的rowbgselector.xml

<?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>

引用的两个可绘制对象在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>

文件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>

这在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在所有attr/colorAccent都不同。 但是似乎由于棒棒糖之前的这个错误,您无法在选择器中引用这样的属性...

我有哪些替代选择? 我能想到的唯一选择是为每个主题创建一个单独的选择器xml文件,并添加attr/bg_selector类的东西,然后为每个主题引用正确的选择器文件。 这将花费我很多年的时间,并且进一步需要为该选择器进行任何更改(如果要稍后使颜色稍微变暗或变浅,则必须遍历所有这些文件...)。

没有其他选择吗?

===============>>#1 票数:1

TL; DR:恐怕您是正确的,棒棒糖之前没有其他方法可以解决此问题。

我碰到这个问题,搜索出来的答案,相关但不同的问题与内置的选择(即一个activatedBackgroundIndicator因为它涉及到colorControlActivatedcolorAccent )。 就我而言,一个棘手的解决方法是在共享库中定义颜色资源,然后在每个应用程序中定义相同名称的颜色资源。 我认为棒棒糖之前的主题没有类似的东西。

  ask by Nick Thissen translate from so

未解决问题?本站智能推荐: