EditTextPreference 设置 defaultValue 的数据类型
来源:互联网 发布:Linux查看sdb信息 编辑:程序博客网 时间:2024/06/06 07:30
EditTextPreference 设置 defaultValue 的数据类型
我们经常使用PreferenceFragment来设置应用的一些配置参数,通常我们需要自定义一个xml文件,用来显示有那些参数,并定义这些参数的默认值。例如下面:
<EditTextPreference android:defaultValue="0000" android:dialogTitle="Test" android:key="test" android:summary="0000" android:title="Test"/>
我们想设置一个key为“test”默认值为字符串“0000”的Preference
,在PreferenceFragment
中通过addPreferencesFromResource()
方法将这个xml文件中的Preference
添加进来,可是在打开这个EditTextPreference
之后发现默认值被设置为“0”,不是我们设想的“0000”。为什么会这样,我们来看下源码:
public void addPreferencesFromResource(int preferencesResId) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromResource(getActivity(), preferencesResId, getPreferenceScreen())); }
中间代码忽略…最后跟踪到下面这个方法:
@Override protected Object onGetDefaultValue(TypedArray a, int index) { return a.getString(index); }
然后看一下a.getString(index)
的方法体:
public String getString(int index) { if (mRecycled) { throw new RuntimeException("Cannot make calls to a recycled instance!"); } index *= AssetManager.STYLE_NUM_ENTRIES; final int[] data = mData; final int type = data[index+AssetManager.STYLE_TYPE]; if (type == TypedValue.TYPE_NULL) { return null; } else if (type == TypedValue.TYPE_STRING) { return loadStringValueAt(index).toString(); } TypedValue v = mValue; if (getValueAt(index, v)) { Log.w(Resources.TAG, "Converting to string: " + v); CharSequence cs = v.coerceToString(); return cs != null ? cs.toString() : null; } Log.w(Resources.TAG, "getString of bad type: 0x" + Integer.toHexString(type)); return null; }
查看源码发现需要一个TypedValue.TYPE_STRING
的数据类型才能正确解析“0000”字符串,那么怎么才能把“0000”定义成TypedValue.TYPE_STRING
的数据类型呢,答案其实很简单,我们在字符串资源文件strings.xml文件里定义一个字符串资源:
<resources> <string name="test">0000</string></resources>
然后将android:defaultValue
的值改为字符串引用:
<EditTextPreference android:defaultValue="@string/test" android:dialogTitle="Test" android:key="test" android:summary="0000" android:title="Test"/>
这样TypedArray 自然会识别字符串类型,再也不会转换错误了,其它类型都可以这样修改,这样修改的好处是保证默认值数据是你希望的那样。
注意Preference中的android:defaultValue默认只支持这几种数据类型: boolean, float, integer, reference, string。
4 0
- EditTextPreference 设置 defaultValue 的数据类型
- EditTextPreference 设置 defaultValue 的数据类型显示问题
- 设置默认值;this.defaultValue
- defaultValue
- defaultValue与value的区别
- 表单元素的defaultValue属性
- DataTable中DefaultValue的使用
- Defaultvalue在Ie67下的Bug
- defaultValue与value的区别 (react.js)
- EditTextPreference InputFilter过滤字符串及限制长度的实现
- Android开发 EditTextPreference 和 ListPreference的summary值动态修改
- EditTextPreference InputFilter过滤字符串及限制长度的实现
- Android开发 EditTextPreference 和 ListPreference的summary值动态修改
- 相依的DefaultValue或ValidValue向前相依性無效
- webservice里的@queryparam、@pathparam、@DefaultValue使用介绍
- react Input 的defaultValue不随着state变化
- ${varname:-defaultvalue}
- 如何使PreferenceActivity中的EditTextPreference中summary显示当前的值
- 看书
- (java)求N阶乘末尾0的个数
- cocos2dx 坐标系相关知识总结
- java 中文转拼音
- 转义字符表
- EditTextPreference 设置 defaultValue 的数据类型
- 利用runtime将json自动生成model,支持NSArray
- Java字符串:StringBuilder使用详解及源码分析
- 常用正则
- iOS开发的一些奇巧淫技
- 更改导航栏的背景和文字Color
- 关于多线程的使用一些基本介绍
- layout_width和width有什么区别
- vimdff cannot read or write temp files