设置background属性使用selector的时候内置?attr报错的解决方案

当我们设置background属性的时候可以设置background="@color/black"

也可以设置 background="@drawable/selector"

然后selector我们可以这样设置

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 没有焦点时的背景图片 -->
    <item android:drawable="@color/colorPressed" android:state_pressed="true"/>
    <item android:drawable="@color/colorPressed" android:state_focused="true"/>
    <item android:drawable="@color/colorPressed" android:state_selected="true"/>
    <item android:drawable="@color/black" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
</selector>
但是当我们设置了属性来设置这个颜色的时候就会遇到崩溃比如我们这样
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 没有焦点时的背景图片 -->
    <item android:drawable="@color/colorPressed" android:state_pressed="true"/>
    <item android:drawable="@color/colorPressed" android:state_focused="true"/>
    <item android:drawable="@color/colorPressed" android:state_selected="true"/>
    <item android:drawable="?attr/backgroundColorValue" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
</selector>
运行的话会直接崩溃,报错的原因是无法获取到对应的drawable对象,至于为什么无法将颜色转换成对应的drawable我也不清楚,既然不能转换那我们可以手动转换解决方案:手动创建一个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="?attr/backgroundColorValue" />
</shape>
然后我们再到selector中引用这个drawable就可以了
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 没有焦点时的背景图片 -->
    <item android:drawable="@color/colorPressed" android:state_pressed="true"/>
    <item android:drawable="@color/colorPressed" android:state_focused="true"/>
    <item android:drawable="@color/colorPressed" android:state_selected="true"/>
    <item android:drawable="@drawable/shape" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
</selector>
 
时间: 2024-10-06 12:07:59

设置background属性使用selector的时候内置?attr报错的解决方案的相关文章

爱根,征服我的一天[isinstance,issubclass]、反射、内置attr,定制自己的数据类型

今日重点: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 isinstance,issubclass # isinstance(obj,cls)检查是否obj是否是类 cls 的对象. # issubclass(sub,super)检查sub类是否是 super 类的派生类. class Peop

Spring Boot 添加jersey-mvc-freemarker依赖后内置tomcat启动不了解决方案

我在我的Spring Boot 项目的pom.xml中添加了jersey-mvc-freemarker依赖后,内置tomcat启动不了. 报错信息如下: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletCon

Python随心记--类的内置attr属性

class Foo: x = 1 def __init__(self,y): self.y = y def __getattr__(self, item): #如果对象不存在的属性是会触发 print('执行了__gerattr__') def __delattr__(self, item): #删除的时候会触发 print('执行了__delattr__') self.__dict__.pop(item) def __setattr__(self, key, value): #设置属性是会触发

用户iis可以用外网ip访问,用内网访问报错404

如下,没有添加内网ip绑定

angularjs 解决ng-repeat数组内重复对象报错的问题

ng-repeat 循环数组内元素时,如果数组内元素重复,angular会抛出异常: Error: [ngRepeat:dupes] http://errors.angularjs.org/1.4.3/ngRepeat/dupes?p0=record%20in%20records&p…2coachCode%22%3A%2200455532%22%2C%22%24%24hashKey%22%3A%22object%3A5%22%7D 为解决这个问题,可以在ng-repeat指令中加上track b

面向对象——类的内置attr(三十三)

class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(self, item): print('----> from getattr:你找的属性不存在') def __setattr__(self, key, value): print('----> from setattr') # self.key=value #这就无限递归了,你好好想想 # self.__dict__[key]=value #应该使用它 def __de

php thinkphp 接口跨域问题 设置了headers 还是报错的解决方案 OPTIONS 跨域

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){ header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization"); header('Access-Control-Allow-Methods: GET, PO

中海达RTK是使用说明之手机卡内置网络设置

中海达RTK使用说明,中海达RTK内置网络,中海达网络RTK,中海达RTK使用手机卡内置网络如何设置 手薄型号:Ihand20 安卓系统手薄 软件:hi-survey road\elec 仪器:中海达公司任意RTK产品 中海达RTK使用手机卡内置网络如何设置? 手机卡内置网络网络RTK设置流程: 1.设置基准站发射信号,数据链选择内置网络. 2.设置移动站接收信号,数据链选择内置网络,得到固定解. 3.注意基准站和移动站的IP.端口.分组号.小组号要设置一样! 1.设置基准站发射信号. 1.1

类内置的attr属性

python类的内置attr属性 class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(self, item): print('----> from getattr:你找的属性不存在') def __setattr__(self, key, value): print('----> from setattr') # self.key=value #这就无限递归了,你好好想想 # self.__dict__[key]=valu