ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-08 09:23:39  阅读:213  来源: 互联网

标签:android android-theme attr android-selector


我的应用程序中有一个选择器项,用作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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有