原生Camera设置的分析(三):自定义控件ListPreference分析
来源:互联网 发布:作曲编曲软件 编辑:程序博客网 时间:2024/05/22 23:58
分析自定义控件ListPreference前,首先来看下ListPreference所用到的一些自定义的属性。关于自定义属性在之前有所提到:Camera学习笔记(一):camera_preferences.xml分析 。
ListPreference所用到的一些自定义的属性定义如下,一般目录在res/values/attrs.xml:
<declare-styleable name="ListPreference"> <attr name="key" format="string" /> <attr name="defaultValue" format="string|reference" /> <attr name="entryValues" format="reference" /> <attr name="entries" format="reference" /></declare-styleable>
上面的自定义属性包括主键(key)、默认值(defaultValue)、值的集合(entryValue)和值对应的名字(entries)。
自定义控件ListPreference的关键代码构造函数如下:
private final String mKey; //主键private final CharSequence[] mDefaultValues; //默认值private CharSequence[] mEntries;private CharSequence[] mEntryValues;private CharSequence[] mOriginalSupportedEntries;private CharSequence[] mOriginalSupportedEntryValues; //记录过滤的分辨率private CharSequence[] mOriginalEntries;private CharSequence[] mOriginalEntryValues; //记录应用层所支持的所有分辨率 public ListPreference(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.ListPreference, 0, 0); mKey = a.getString(R.styleable.ListPreference_key); int attrDefaultValue = R.styleable.ListPreference_defaultValue; TypedValue tv = a.peekValue(attrDefaultValue); if (tv != null && tv.type == TypedValue.TYPE_REFERENCE) { mDefaultValues = a.getTextArray(attrDefaultValue); } else { mDefaultValues = new CharSequence[1]; mDefaultValues[0] = a.getString(attrDefaultValue); } setEntries(a.getTextArray(R.styleable.ListPreference_entries)); setEntryValues(a.getTextArray(R.styleable.ListPreference_entryValues)); a.recycle(); mOriginalEntryValues = mEntryValues; mOriginalEntries = mEntries;}
setEntryValue()是用来读取应用层所支持的分辨率。例如下面的是某个xml文件用到的该控件,代码如下:
<ListPreference camera:key="pref_camera_picturesize_key" camera:title="@string/pref_camera_picturesize_title" camera:entries="@array/pref_camera_picturesize_entries" camera:entryValues="@array/pref_camera_picturesize_entryvalues" />
则 setEntryValues 里面的参数 R.styleable.ListPreference_entryValues 是为了获取ListPreferences的属性 entryValues,然后再用 a.getTextArray(R.styleable.ListPreference_entryValues)获取所有的分辨率。
private final String mKey; //主键private final CharSequence[] mDefaultValues; //默认值private CharSequence[] mEntries;private CharSequence[] mEntryValues;private CharSequence[] mOriginalSupportedEntries;private CharSequence[] mOriginalSupportedEntryValues; //记录过滤的分辨率private CharSequence[] mOriginalEntries;private CharSequence[] mOriginalEntryValues; //记录应用层所支持的所有分辨率 public ListPreference(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.ListPreference, 0, 0); mKey = a.getString(R.styleable.ListPreference_key); int attrDefaultValue = R.styleable.ListPreference_defaultValue; TypedValue tv = a.peekValue(attrDefaultValue); if (tv != null && tv.type == TypedValue.TYPE_REFERENCE) { mDefaultValues = a.getTextArray(attrDefaultValue); } else { mDefaultValues = new CharSequence[1]; mDefaultValues[0] = a.getString(attrDefaultValue); } setEntries(a.getTextArray(R.styleable.ListPreference_entries)); setEntryValues(a.getTextArray(R.styleable.ListPreference_entryValues)); a.recycle(); mOriginalEntryValues = mEntryValues; mOriginalEntries = mEntries;}
0 0
- 原生Camera设置的分析(三):自定义控件ListPreference分析
- 原生Camera设置的分析(二):分辨率的过滤
- 原生Camera设置的分析(一):布局
- Camera系统中设置picture大小菜单的流程分析(三)
- Camera系统中设置picture大小菜单的流程分析(三)
- Camera app 分析(三)拍照流程
- 自定义控件(三) 源码分析measure流程
- Android自定义相机的实现以及Camera框架分析
- Camera系统中设置picture大小菜单的流程分析
- Camera系统中设置picture大小菜单的流程分析
- 自定义带图标的Preferecnce-----类ListPreference实现(1)
- 自定义控件案例分析
- 自定义控件分析1
- 自定义控件分析2
- Camera系统中设置picture大小菜单的流程分析(一)
- Camera系统中设置picture大小菜单的流程分析(二)
- Camera系统中设置picture大小菜单的流程分析(一)
- Camera系统中设置picture大小菜单的流程分析(二)
- 公钥与私钥 数字签名的理解
- MATLAB中标注图例
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
- LeetCode: Palindrome Partitioning [131]
- 粒子特效
- 原生Camera设置的分析(三):自定义控件ListPreference分析
- Unity3d中SendMessage 用法简单笔记
- WPf 带滚动条WrapPanel 自动换行 和控件右键菜单
- 黑马程序员——Java面向对象——多态
- C语言的数组名和对数组名取地址
- Unity3d4.0安装及其破解方法
- 用shc加密shell脚本
- SIP SAP及SDP协议组合应用的研究
- 设计模式(5)——适配器模式(Adapter Pattern)