android中?attr/**与@drawable/**或@color/**等的区别及用法
2017-09-11 20:38
471 查看
前言
今天在写一个Demo,研究主题的时候,遇到了【?attr/colorPrimary】这个用法,由于网上都是千篇一律的回答,所以我只能硬着头皮去看源码了,茶壶煮饺子,暂且记下来,作为备忘录吧。一、?attr/**
这个Google把它叫做“预定义样式”,字面意思就是“预先定义好的样式”。也就是相当于给这个样式定义一个变量,随后是可以进行赋值的。用的最多的场景就是自定义控件了,比如我现在需要自定义一个控件,要求它的字体颜色是可以动态修改的。此时,我们可以这样做:
第一步:在attrs.xml中声明一个属性:
<declare-styleable name="SunnyAttr"> </declare-styleable>
第二步:指定属性的名字及 属性值的类型
<declare-styleable name="SunnyAttr"> <attr name="sunnyTextColor" format="reference"/> <attr name="sunnyTextColorWhite" format="color"/> </declare-styleable>
属性值 的类型有以下几种:
reference: 指参考指定Theme中的资源ID(比如:@string/test)
color:指颜色值(比如:#FFFF0000)
boolean: 布尔值(比如:true)
dimension:尺寸(比如:100dp)
float:浮点型(比如:0.3)
integer:整型(比如:1)
string:字符串
fraction:百分数(比如:100%)
flag:或运算(比如:0x10 | 0x11)
enum:枚举
。
第三步:由于从源码里面窥探出,attr/是跟随Theme来变化的,因此我们可以定义一个继承自Android系统某一主题的主题样式:
<style name="SunnyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
第四步:在自定义主题里面,再定义一个供外面调用的属性名,并赋值:
<style name="SunnyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!--定义一个供外面引用的属性名,并赋值--> <item name="sunnyTextColorRed">@color/sunnyTextColorYellow</item> </style>
第五步:最后我们在xml中使用自定义控件的自定义属性时,就可以为它赋值了:
<com.smartbracelet.sunny.sunnydemo3.SunnyTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="设置界面" app:sunnyTextColor="?attr/sunnyTextColorRed" />
二、@color,@drawable
说完?attr/,再看@color与@drawable,后面2个是我们平时最常用的,就是指定资源,不是动态的,不会随着主题变化<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="红色" android:textColor="@color/sunnyTextColorRed" />
以上,就是?attr/与@color,@drawable的一个小总结。。。。
相关文章推荐
- android中?attr/**与@drawable/**或@color/**等的区别
- android中?attr/**与@drawable/**或@color/**等的区别
- android中?attr/**与@drawable/**或@color/**等的区别
- android中?attr/**与@drawable/**或@color/**等的区别
- android中?attr/**与@drawable/**或@color/**等的区别
- setBackground(),setBackgroundResource(),setBackgroundColor(),setBackgroundDrawable()的区别和用法
- android 笔记: setBackgroundDrawable和setBackgroundColor的用法
- android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedVa
- android mipmap目录和drawable目录的区别
- android 定义颜色color时6位或8位值的区别
- Android中Parcelable接口和Serial接口的用法与区别
- android中handler.sendMessage,handler.post(r)的用法与区别
- Android中gravity与layout_gravity的区别与用法
- Android Drawable 那些不为人知的高效用法
- Android笔记 001_Android里的|和||的用法区别?
- android Bitmap和Drawable的区别
- Android中 requestCode与resultCode的区别与用法
- Android中padding与layout_margin的区别与用法
- setBackgroundDrawable和setBackgroundColor的用法
- color用法大全--Android布局背景颜色设置