Android之设置页面(PreferenceActivity使用)
转载请标明出处:
http://blog.csdn.net/zq2114522/article/details/50557811;
本文出自:【梁大盛的博客】
Android之设置页面(PreferenceActivity使用)
引:没仔细看Setting之前也接触过PreferenceActivity.之前还是停留在PreferenceActivity仅仅封装了SharedPreferences的层面上.事实上PreferenceActivity早在API 1就引入并且很多时候用来设计设置页面.原生Android Setting程序就是这样干的.使用PreferenceActivity作为设置页面可以省略界面的设计,用各种Preference的子类实现界面,如CheckBoxPreference, EditTextPreference, ListPreference, MultiSelectListPreference, PreferenceCategory, PreferenceScreen, SwitchPreference等.编辑一个xml文件即可以完成界面的设计.然后提供形形色色的回调接口.当设置给修改以后会自动保存相应的SharedPreferences并且回调已经设置的回调函数.
首先贴出Demo效果图和代码.
MainActivity.java
package com.example.dsliang.preferenceactivitydemo;import android.app.FragmentTransaction;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, new PreferenceFagment()); fragmentTransaction.commit(); }}
package com.example.dsliang.preferenceactivitydemo;import android.app.Activity;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.PreferenceFragment;import android.widget.Toast;/** * Created by dsliang on 2016/1/21. */public class PreferenceFagment extends PreferenceFragment { SharedPreferences.OnSharedPreferenceChangeListener mChangeListener; Activity mActivity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = getActivity(); mChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if ("setting_wifi".equals(key) || "setting_bluetouh".equals(key) || "charge_lock_screen".equals(key) || "never_sleep".equals(key)) { Toast.makeText(mActivity, key + " : change to " + sharedPreferences.getBoolean(key, true), Toast.LENGTH_SHORT).show(); }else if("setting_timezone".equals(key)) { findPreference("setting_timezone").setSummary(sharedPreferences.getString(key,"GMY - 02:00")); } } }; addPreferencesFromResource(R.xml.preferences); } @Override public void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(mChangeListener); } @Override public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(mChangeListener); }}PreferenceFagment.java
preferences.xml
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/category_network"> <SwitchPreference android:defaultValue="false" android:key="setting_wifi" android:title="Wi-Fi" /> <SwitchPreference android:defaultValue="false" android:key="setting_bluetouh" android:title="蓝牙" /> <PreferenceScreen android:key="setting_traffic_usage" android:title="流量使用情况" /> PreferenceCategory> <PreferenceCategory android:title="@string/category_device"> <PreferenceScreen android:key="setting_sound" android:title="声音" /> <PreferenceScreen android:key="setting_display" android:title="显示" /> <PreferenceScreen android:key="setting_storage" android:title="存储" /> <PreferenceScreen android:key="setting_battery" android:title="电池" /> <PreferenceScreen android:key="setting_application" android:title="应用" /> PreferenceCategory> <PreferenceCategory android:title="@string/category_system"> <PreferenceScreen android:key="setting_date_time" android:title="日期和时间"> <CheckBoxPreference android:key="auto_set_date_time" android:summary="使用网络上的时间" android:title="自动确定日期和时间" /> <CheckBoxPreference android:key="auto_set_timezone" android:summary="使用网络上的时区" android:title="自动确定时区" /> <Preference android:dependency="auto_set_date_time" android:summary="2016-1-21" android:title="设置日期" /> <Preference android:dependency="auto_set_date_time" android:summary="上午 10:43" android:title="设置时间" /> <ListPreference android:dependency="auto_set_timezone" android:entries="@array/time_zone" android:entryValues="@array/time_zone" android:key="setting_timezone" android:title="现在时区" /> PreferenceScreen> <PreferenceScreen android:key="setting_auxiliary_function" android:title="辅助功能" /> <PreferenceScreen android:key="setting_developer_options" android:title="开发者选项"> <Preference android:summary="桌面备份密码" android:title="桌面完成备份当前未设置密码保护" /> <CheckBoxPreference android:defaultValue="false" android:key="charge_lock_screen" android:summary="充电时屏幕不会休眠" android:title="不锁定屏幕" /> <CheckBoxPreference android:defaultValue="true" android:key="never_sleep" android:summary="Screen will never sleep" android:title="Always stay awake" /> PreferenceScreen> <PreferenceScreen android:key="setting_about_phone" android:title="关于手机"> <Preference android:summary="电话号码、信号等" android:title="状态信息" /> <Preference android:title="法律信息" /> <Preference android:summary="Samsung Galaxy S2 - 4.1.1 - API 16 - 480*800" android:title="信号" /> <Preference android:summary="4.1.1" android:title="Android版本" /> <Preference android:summary="未知" android:title="基带版本" /> PreferenceScreen> PreferenceCategory> <Preference android:title="关于"> <intent android:action="android.intent.action.VIEW" android:data="http://blog.csdn.net/zq2114522" /> Preference>PreferenceScreen>
strings.xml
<string name="app_name">PreferenceActivityDemostring> <string name="category_network">无线和网络string> <string name="category_device">设备string> <string name="category_system">系统string> name="time_zone"> <item>GMT - 00:00item> <item>GMT - 01:00item> <item>GMT - 02:00item> <item>GMT - 03:00item> <item>GMT - 04:00item> <item>GMT - 05:00item> <item>GMT - 06:00item> <item>GMT - 07:00item> <item>GMT - 08:00item> <item>GMT - 09:00item> <item>GMT - 10:00item> <item>GMT - 11:00item> <item>GMT - 12:00item> <item>GMT - 13:00item> <item>GMT - 14:00item> <item>GMT - 15:00item> <item>GMT - 16:00item> <item>GMT - 17:00item> <item>GMT - 18:00item> <item>GMT - 19:00item> <item>GMT - 20:00item> <item>GMT - 21:00item> <item>GMT - 22:00item> <item>GMT - 23:00item>
PreferenceActivity的使用,针对3.0系统之前和之后.在3.0之前可以使用PreferenceActivity实现Setting页面.在3.0以后就推荐使用PreferenceFragment实现Setting页面.用Fragment可以很灵活其次可以很容易实现大屏幕的适配.
PreferenceFragment使用
1.继承PreferenceFragment
2.public void onCreate(Bundle savedInstanceState)函数调用addPreferencesFromResource(R.xml.preferences)加载xml布局文件
3.public void onResume()
函数设置registerOnSharedPreferenceChangeListener回调函数
4.public void onPause()
函数取消unregisterOnSharedPreferenceChangeListener回调函数- PreferenceFragment使用比较简单,主要写xml布局文件的编写.
xml布局文件:
1.PreferenceScreen作为根节点
2.子节点包含各种Preference的子类,关键属性,title-标题,summary-摘要,key-在SharedPreferences中使用的索引(id)
3.Preference节点,可以包含intent.当点击该Preference的时候会发送所设置的intent
4.PreferenceScreen根节点可以在包含PreferenceScreen节点.PreferenceScreen代表子页.当点击的时候进入全新的一页.- PreferenceFragment使用比较简单,主要写xml布局文件的编写.
如何获取SharedPreferences数据?
在程序任何地方通过调一下函数可以获取到SharedPreferences
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);String syncConnPref = sharedPref.getString(SettingsActivity.KEY_PREF_SYNC_CONN, "");
参考
1.PreferenceActivity http://android.xsoftlab.net/reference/android/preference/PreferenceActivity.html
2.Preference http://android.xsoftlab.net/reference/android/preference/Preference.html
更多相关文章
- Android 使用ViewStub 实现多状态页面切换基类
- Android OpenGL库函数列表
- h5页面点击按钮,触发手机自带的发短信
- Android页面跳转错误解决
- Android中利用Intent传递数据到另一个页面
- Android WebView 页面自适应
- Android 开发之webview页面返回到最顶关闭
- android 页面切换动画效果 转
- android > intent > 自动跳转到 系统 设置 页面