preference 全接触
PreferenceActivity
为了引入这个概率首先从需求说起即:现有某Activity专门用于手机属性设置那么应该如何做呢?
根据已学知识很快一个念头闪过即:Activity+Preference组合前者用于界面构建后者用于设置数据存放其实这是正确的但是这会比较繁琐因为每个设置选项都要建立与其对应的Preference
所以现在有更好的选择了那就是本文的主角:PreferenceActivity
从名字应该可以看出其实Activity与Perference的混合物
还是从需求说起常见属性设定有哪几种方式:
1.CheckBox用于确定/取消某项功能如:是否静音对应于:CheckBoxPreference其在Preference有一个选项与其自动绑定下同
2.ListView用于列出所有选择如:铃声选择列出所有声音供选择使用对应于:ListPreference
3.属性结合用于列出一系列相关属性如:所有与短消息有关的功能对应于:PreferenceScreen该项仅用于界面故与Preference无关
界面其实讨论这个比较鸡肋大家自己试着运行就一目了然了所以觉得还是以步骤为主
鉴于PreferenceActivity使用网络很多故此略过为了给自己备份防止以后用到大致叙述一下
[代码步骤]
1.PreferenceActivity界面比较特别在res/xml/setting.xml
Java代码
<?xmlversion="1.0"encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="autoBack"
android:title="自动回复"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<PreferenceCategoryandroid:title="SMS助手">
<CheckBoxPreference
android:key="smsSilence"
android:title="静音"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="false"
/>
<PreferenceScreenandroid:title="更多选项">
<CheckBoxPreference
android:key="cb21"
android:title="功能1"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<CheckBoxPreference
android:key="cb22"
android:title="功能2"
android:summaryOn="使用"
android:summaryOff="停用"
android:defaultValue="true"
/>
<ListPreference
android:key="list1"
android:title="androidforum"
android:summary="开发论坛"
android:dialogtitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
<EditTextPreference
android:key="et1"
android:title="EditTextPreferenceSample"
android:summary="点击输入"
android:dialogtitle="输入设置"
android:defaultValue="HelloEditTextPreference"
/>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategoryandroid:title="其他选项">
<RingtonePreference
android:key="rt1"
android:title="RingtonePreferenceSample"
android:summary="选择铃声"
/>
</PreferenceCategory>
</PreferenceScreen>
<?xmlversion="1.0"encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="autoBack"
android:title="自动回复"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<PreferenceCategoryandroid:title="SMS助手">
<CheckBoxPreference
android:key="smsSilence"
android:title="静音"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="false"
/>
<PreferenceScreenandroid:title="更多选项">
<CheckBoxPreference
android:key="cb21"
android:title="功能1"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<CheckBoxPreference
android:key="cb22"
android:title="功能2"
android:summaryOn="使用"
android:summaryOff="停用"
android:defaultValue="true"
/>
<ListPreference
android:key="list1"
android:title="androidforum"
android:summary="开发论坛"
android:dialogtitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
<EditTextPreference
android:key="et1"
android:title="EditTextPreferenceSample"
android:summary="点击输入"
android:dialogtitle="输入设置"
android:defaultValue="HelloEditTextPreference"
/>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategoryandroid:title="其他选项">
<RingtonePreference
android:key="rt1"
android:title="RingtonePreferenceSample"
android:summary="选择铃声"
/>
</PreferenceCategory>
</PreferenceScreen>2.导入setting.xml
Java代码
addPreferencesFromResource(R.xml.settings);
addPreferencesFromResource(R.xml.settings);emulator运行截图:
点开"更多选项"
具体请大家自己尝试之
3.其实关于PreferenceActivity问题基本结束了但是初次使用会碰到一些坎坷现一一讨论
4.监听设定变化问题普通布局里的监听比较简单先通过findViewById()获得目标View再在其上注册监听器即可
但是PreferenceActivity并没有提供findViewById()也就无法监听那么怎么做呢?
-得到SharedPreferences句柄
Java代码
sp=PreferenceManager.getDefaultSharedPreferences(this);
sp=PreferenceManager.getDefaultSharedPreferences(this);-在sp之上注册改变监听器
Java代码
sp.registerOnSharedPreferenceChangeListener(newOnSharedPreferenceChangeListener(){
@Override
//sharedPreferences:句柄
//key:改变键值
publicvoidonSharedPreferenceChanged(
SharedPreferencessharedPreferences,Stringkey){
//TODOAuto-generatedmethodstub
if(key.equals("autoBack")){
BooleanautoBack=sharedPreferences.getBoolean("autoBack",false);
if(autoBack){
Log.d("TAG","autoBack:true!");
}
else{
Log.d("TAG","autoBack:false!");
}
}
}
});
sp.registerOnSharedPreferenceChangeListener(newOnSharedPreferenceChangeListener(){
@Override
//sharedPreferences:句柄
//key:改变键值
publicvoidonSharedPreferenceChanged(
SharedPreferencessharedPreferences,Stringkey){
//TODOAuto-generatedmethodstub
if(key.equals("autoBack")){
BooleanautoBack=sharedPreferences.getBoolean("autoBack",false);
if(autoBack){
Log.d("TAG","autoBack:true!");
}
else{
Log.d("TAG","autoBack:false!");
}
}
}
});5.Preference异地使用即:PreferenceActivity在一个应用程序而别处应用程序可能也想改变该数据怎么做呢?
-通过getSharedPreferences()得到SharedPreferences实例
Java代码
spc=this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml",MODE_WORLD_READABLE);
spc=this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml",MODE_WORLD_READABLE);-取值
Java代码
BooleanautoBack=spc.getBoolean("autoBack",false);
BooleanautoBack=spc.getBoolean("autoBack",false);-赋值
Java代码
publicvoidputValue(Stringkey,Booleanvalue){
spe=spc.edit();
spe.putBoolean(key,value);
spe.commit();
}
publicvoidputValue(Stringkey,Booleanvalue){
spe=spc.edit();
spe.putBoolean(key,value);
spe.commit();
}就这样结束似乎感觉不爽所以决定加点料
-ListPreference使用
Java代码
<ListPreference
android:key="list1"
android:title="androidforum"
android:summary="开发论坛"
android:dialogtitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
<ListPreference
android:key="list1"
android:title="androidforum"
android:summary="开发论坛"
android:dialogtitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
-EditTextPreference使用
Java代码
<EditTextPreference
android:key="et1"
android:title="EditTextPreferenceSample"
android:summary="点击输入"
android:dialogtitle="输入设置"
android:defaultValue="HelloEditTextPreference"
/>
<EditTextPreference
android:key="et1"
android:title="EditTextPreferenceSample"
android:summary="点击输入"
android:dialogtitle="输入设置"
android:defaultValue="HelloEditTextPreference"
/>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sfrysh/archive/2010/11/03/5984892.aspx