因此,选择器使用两个抽屉,一个用于压制状态,一个用于常规.
文件:文件夹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 – 在Lollipop之前设计一个可选择的选择器全部内容,希望文章能够帮你解决android – 在Lollipop之前设计一个可选择的选择器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)