您的位置:首页 > Web前端

利用attrs.xml和 styles.xml定义Preference

2016-07-15 14:22 309 查看
 

1.attrs.xml
[align=justify]/android/frameworks/base/core/res/res/values/attrs.xml[/align]
[align=justify]
[/align]

[align=justify]attrs.xml文件为View/ViewGroup定义了所有可用的属性。它的根元素是<resources…>,它包含了俩个子元素:[/align]
[align=justify]
[/align]

[align=justify]a.attr子元素:定义的属性。[/align]

[align=justify]b.declare-styleable子元素:定义一个styleable对象,每个styleable对象都是一组attr属性的集合。[/align]

[align=justify]
[/align]
[align=justify]在这里我们主要看一下Preference组件定义的属性值:[/align]
[align=justify]
[/align]



[align=justify]
[/align]

[align=center][/align]
[align=justify]由图中可以看出,定义了一个Preference的styleable对象,它里面包含了如layout、icon等属性。[/align]

[align=justify]
[/align]

2.styles.xml
[align=justify]/android/frameworks/base/core/res/res/values/styles.xml[/align]
[align=justify]
[/align]

[align=justify]styles.xml文件为在attrs.xml文件中定义的属性设定默认值。[/align]
[align=justify]
[/align]
[align=justify]在这里我们主要看一下Preference组件的默认值:[/align]



[align=justify]
[/align]

[align=center][/align]

由代码可以看出,Preference的Style只定义了layout的属性值。那么在Preference控件中,又是如何把这个
layout加载的。下面看一下Preference.java源码。
[align=left]
[/align]
其中Preference.CheckBoxPreference样式是通过圆点“
.”继承自Preference样式,并覆写了其中的属性值“widgetLayout”。
[align=left]
[/align]

3.Preference.java
[align=justify]/android/frameworks/base/core/java/android/preference/Preference.java[/align]
[align=justify]
[/align]



[align=center][/align]
[align=justify]
[/align]
[align=justify]Preference.java中有三个构造方法,最后调用的都是第一个构造方法:[/align]
[align=justify]Preference(Context context,AttributeSet attrs, int defStyle)[/align]
[align=justify]
[/align]
[align=justify]其中最关键的一句代码是:[/align]
TypedArray a = context.obtainStyledAttributes(attrs,com.android.internal.R.styleable.Preference,
defStyle,0);
[align=justify]
[/align]
[align=justify]a.第一个参数:AttributeSet对象,它包含了在attrs.xml文件中定义的所有属性。[/align]
b.第二个参数:int[]对象(com.android.internal.R.styleable.Preference),它是我们在attrs.xml文件中定义的
Preference属性,即
[align=center][/align]
系统会把Preference styleable编译为一个int[]数组,里面存放的是
Preference每一个attr的ID值。



c.第三个参数:int对象(com.android.internal.R.attr.preferenceStyle),它是我们在styles.xml文件中定义的
Preference属性默认值,即
[align=center][/align]
这样子,我们就把preference.xml作为Preference属性<attr
name=”layout”的默认值。
[align=left]
[/align]



[align=left]也就是说,我们将Preference的属性和默认值都放到TypedArray类中,然后通过switch语句将它们提取出来,并利用这些值初始化相关属性,如mLayoutResId。[/align]
[align=left]
[/align]

4.CheckBoxPreference.java
[align=justify]最后,我们来看一下继承自Preference的CheckBoxPreference.java。[/align]



[align=justify]
[/align]
[align=center][/align]
[align=justify]相比于Preference:[/align]
a.在attrs.xml文件中添加了几个其他属性值,如
”summaryOn/summaryOff等”



[align=justify]
[/align]
[align=center][/align]
b.在styles.xml文件中设置了属性
<attr name=”widgetlayout”的默认值。(其实就是在
CheckBoxPreference最右边添加了一个checkBox)

[align=center]  [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息