Android之设置页面(PreferenceActivity使用)
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"> <!--android:defaultValue 设置默认值--> <!--android:key 在Preference里面存储的key,在代码中通过此key索引Preference对象--> <!--android:title 标题--> <!--android:summary 描述,对选项进一步补充描述 --> <!--PreferenceCategory一组分类--> <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代表一页选项,当点击进去的时候会跳转到另一个页面,点击返回按钮会回到上一个页面--> <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
<resources> <string name="app_name">PreferenceActivityDemo</string> <string name="category_network">无线和网络</string> <string name="category_device">设备</string> <string name="category_system">系统</string> <array name="time_zone"> <item>GMT - 00:00</item> <item>GMT - 01:00</item> <item>GMT - 02:00</item> <item>GMT - 03:00</item> <item>GMT - 04:00</item> <item>GMT - 05:00</item> <item>GMT - 06:00</item> <item>GMT - 07:00</item> <item>GMT - 08:00</item> <item>GMT - 09:00</item> <item>GMT - 10:00</item> <item>GMT - 11:00</item> <item>GMT - 12:00</item> <item>GMT - 13:00</item> <item>GMT - 14:00</item> <item>GMT - 15:00</item> <item>GMT - 16:00</item> <item>GMT - 17:00</item> <item>GMT - 18:00</item> <item>GMT - 19:00</item> <item>GMT - 20:00</item> <item>GMT - 21:00</item> <item>GMT - 22:00</item> <item>GMT - 23:00</item> </array></resources>
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
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python技巧匿名函数、回调函数和高阶函数
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android EditText设置不可写
- 浅析android通过jni控制service服务程序的简易流程
- android 使用html5作布局文件: webview跟javascript交互
- android“设置”里的版本号