转载请标明出处:
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代表子页.当点击的时候进入全新的一页.

  • 如何获取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

更多相关文章

  1. android adb工具使用
  2. Android(安卓)Studio使用小结
  3. 使用kotlin开发android
  4. Android(安卓)使用 MPAndroidChart 实现折线图
  5. Android中Activity共享变量的另一方法:Application context
  6. 箭头函数的基础使用
  7. NPM 和webpack 的基础使用
  8. Python技巧匿名函数、回调函数和高阶函数
  9. Python list sort方法的具体使用

随机推荐

  1. android之调用webservice 实现图片上传
  2. Android(安卓)重读官方文档 1
  3. Android(安卓)ListView专题之十二 分页不
  4. 从android1.1到android2.2
  5. android window类解析
  6. Android的ADB工具使用
  7. Android多媒体学习一:Android中Image的简
  8. android Manifest.xml全局配置文件中根标
  9. 【Android应用开发】-(7)安全性设计(完整版
  10. Android高手进阶教程(四)之----Android(