PreferenceFragment 和 PreferenceActivity讲解
来源:互联网 发布:内存兼容性测试软件 编辑:程序博客网 时间:2024/05/16 02:38
很明显PreferenceFragment 是Fregment, PreferenceActivity是Activity。
当你的应用针对的系统在3.0以上的时候,你就应该用PreferenceFragment,现在主流系统4.0的情况下,当然选择使用PreferenceFragment。原因是PreferenceFragment是一个更加平滑的结构,你可以将它依附在任何的activity上面,谷歌强力推荐使用PreferenceFragment!
常用Preference
CheckPreference —— CheckBox 单选框
EditTextPreference —— EditText 输入文本框
ListPreference —— ListView 列表框
RingtonePreference —— 选择铃声
XML定义常用的属性有:
android:key :每个Preference控件独一无二的”ID”,唯一表示此Preference。
android:defaultValue :默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;
EditTextPreference的默认值可为”110”。
android:enabled :表示该Preference是否可用状态。
android:title :每个Preference在PreferenceScreen布局上显示的标题——大标题
android:summary :每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)
ListPreference中:
android:entries:类型为array,控件欲显示的文本
android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件
PreferenceFragment 使用步骤
1.定义preference
在项目的res/xml中新建一个preferences.xml.用于定义菜单界面的设置选项:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="PreferenceCategory A"> <CheckBoxPreference android:key="checkbox_preference" android:title="title_checkbox_preference" android:summary="summary_checkbox_preference" /> </PreferenceCategory> <PreferenceCategory android:title="PreferenceCategory B"> <EditTextPreference android:key="edittext_preference" android:title="title_edittext_preference" android:summary="null" android:dialogTitle="dialog_title_edittext_preference" android:defaultValue="null" /> <ListPreference android:dialogTitle="Choose font" android:entries="@array/pref_font_types" android:entryValues="@array/pref_font_types_values" android:key="list_preferenc" android:summary="sans" android:title="Font" android:defaultValue="sans"/> </PreferenceCategory></PreferenceScreen>
android:entries 和 android:entryValues定义在res/values/strings.xml中
<string name="app_name">AndroidPreferenceFragment</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string> <string-array name="pref_font_types"> <item>sans</item> <item>serif</item> <item>monospace</item> <item>Yahei</item> </string-array> <string-array name="pref_font_types_values"> <item>sans</item> <item>serif</item> <item>monospace</item> <item>Yahei</item> </string-array>
2.创建一个activity用于给PreferenceFragment依附
package com.example.Androidpreferencefragment;import android.app.Activity;import android.os.Bundle;public class SetPreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); }}
3.创建PreferenceFragment
package com.example.androidpreferencefragment;import android.annotation.SuppressLint;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.Preference;import android.preference.PreferenceFragment;import android.preference.Preference.OnPreferenceChangeListener;@SuppressLint("NewApi")public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener{ @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // TODO Auto-generated method stub // Set summary to be the user-description for the selected value if(!key.equals(MainActivity.PRF_CHECK)) { Preference connectionPref = findPreference(key); connectionPref.setSummary(sharedPreferences.getString(key, "")); } } @Override public void onResume() { super.onResume(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); super.onPause(); }}
implements OnSharedPreferenceChangeListener 是用于监听SharedPreference是否改变的。这里主要的作用是当SharedPreference改变的时候及时更新界面中preference的summary,提供一个更好的交互。注意在OnResume和OnPause中要注册和卸载监听器,维护activity中的生命周期。
注:不能给每个preference设置OnChangeListener来更新界面中preference的summary,这样会阻止系统存储preference.xml.
4.设置默认
当用户第一次运行应用的时候,用户还没有设置自己preference,这时候就要指定默认的prefernnce了。
首先在xml定义好Android:defaultValue项。然后在主Activity(也可以是其他activity,但在第一次运行的时候一定会进去,比如闪屏Activity)的onCreate方法中调用setDefaultValues方法。
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);这个函数有三个参数:
第一个为应用上下文,第二个是preference的id,第三个为false指只在第一次运行的时候加载默认值。
5.取出preference值
SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
然后通过get方法和key值就可以取出对应的值了,比如:
mySharedPreferences.getBoolean("checkbox_preference", false);String my_edittext_preference = mySharedPreferences.getString("edittext_preference", "");
- PreferenceFragment 和 PreferenceActivity讲解
- PreferenceFragment,PreferenceActivity
- PreferenceActivity和PreferenceFragment及数据存储
- PreferenceActivity和PreferenceFragment实现设置界面
- PreferenceActivity与PreferenceFragment理解
- PreferenceActivity PreferenceFragment preference-headers
- PreferenceActivity与PreferenceFragment应用
- PreferenceActivity、PreferenceFragment使用
- 利用PreferenceFragment替换PreferenceActivity
- Android_UI:PreferenceActivity PreferenceFragment
- Preference、PreferenceActivity,PreferenceFragment
- Android学习记录:PreferenceActivity和PreferenceFragment,返回主界面
- PreferenceActivity与PreferenceFragment的理解
- PreferenceFragment或PreferenceActivity使用笔记
- PreferenceActivity结合PreferenceFragment实现参数设置界面
- PreferenceActivity讲解(转载)
- android PreferenceActivity结合PreferenceFragment实现参数设置界面学习实例
- Android学习笔记八.LauncherActvity 之LauncherActivity、PreferenceActivity、PreferenceFragment
- 01背包问题
- JFinal框架入门
- 关于target is null for setProperty的问题总结
- live和on的区别
- 使用Jenkins搭建iOS/Android持续集成打包平台
- PreferenceFragment 和 PreferenceActivity讲解
- queue 模拟 stack
- struts.xml的常用配置
- 模型变高问题测试及原因
- E-R图
- 【低功耗架构开发系列】(二)不找SVN托管代码了,直接用Visual Studio Online
- Spring Boot MyBatis 连接数据库
- Java 判断点是否在特定区域内
- Pro Android学习笔记(一五五):传感器(5): 磁场传感器和方位(上)