其他分享
首页 > 其他分享> > android – 在Lollipop之前设计一个可选择的选择器

android – 在Lollipop之前设计一个可选择的选择器

作者:互联网

我的应用程序中有一个选择器项,用作listview行的背景颜色.关键是该行在点击/触摸时会改变颜色.

因此,选择器使用两个抽屉,一个用于压制状态,一个用于常规.
文件:文件夹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>

引用的两个drawable在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之前的任何事情都失败,错误说不多:
引起:android.content.res.Resources $NotFoundException:来自可绘制资源ID的文件res / drawable / rowbg_shape_selected.xml#0x7f02006c

我相信问题是这是一个在Lollipop中修复的错误,请参见此处:https://code.google.com/p/android/issues/detail?id=26251

问题是我正在尝试引用attr / colorAccent,这当然是在我的主题中定义的.我有几个不同颜色的主题,用户可以选择,attr / colorAccent在所有主题中都有所不同.然而,似乎由于前Lollipop上的这个错误,你无法在选择器中引用这样的属性……

我的替代选择是什么?我能想到的唯一选择是为每个主题创建一个单独的选择器xml文件,并添加类似attr / bg_selector的内容,然后引用每个主题的正确选择器文件.这将花费我很多时间,并且进一步改变这个选择器的任何东西将是大量工作(如果我想稍后使颜色变得更暗或更轻,我将不得不浏览所有这些文件……).

没有其他选择吗?

解决方法:

TL; DR:我担心你是对的,没有其他方法可以解决这个问题前Lollipop.

我遇到了这个问题,寻找一个相关但不同的问题的答案,其中一个内置选择器(即与colorControlActivated和colorAccent相关的activatedBackgroundIndicator).在我的例子中,一个hacky解决方法是在共享库中定义颜色资源,然后在每个应用程序中定义相同名称的颜色资源.我不认为在Lollipop之前支持的主题有类似的东西.

标签:android,android-theme,attr,android-selector
来源: https://codeday.me/bug/20190708/1400707.html