zoukankan      html  css  js  c++  java
  • Android_PreferenceActivity

    为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢? 

    根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放  其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference 

    所以  现在有更好的选择了 那就是本文的主角:PreferenceActivity 从名字应该可以看出 其实 Activity 与 Perference 的混合物 

    这个例子中包括了PreferenceActivity中常见的几种组件,以下为具体介绍及用法:
    PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题,summary设置描述(标题下面的文字),key设置唯一的ID,每个PreferenceScreen内可添加其它元素作为二级设置页面。
    PreferenceCategory:某一类相关的设置,可用Title参数设置标题。
    CheckBoxPreference:是一个CheckBox设置,只有两种值,truefalse,可用Title参数设置标题sumary设置描述,用summaryOnsummaryOff参数来设置控件选中和未选中时的提示,defaultValue设置默认值。
    ListPreference:下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,用dialogTitle 设置下拉框的标题,下拉框内显示的内容和具体的值需要在res/values/array.xml中设置两个array来表示。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string-array name="entries_list_preference">
        <item>test1</item>
        <item>test2</item>
        <item>test3</item>
    </string-array>
    <string-array name="entriesvalue_list_preference">
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>
    </resources>

    这个PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/data/you_package_name /shared_prefs/you_package_name_you_xml_name.xml
    上例中自动生成的配置文件如下:

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <map>
    <string name="EditTextPreference">12332312</string>
    <string name="ListPreference">2</string>
    <string name="RingtonePreference">content://settings/system/ringtone</string>
    <boolean name="CheckBox1" value="true" />
    <boolean name="CheckBox2" value="true" />
    </map>
    要取得其中的值可以通过如下的方法:
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    value = prefs.getString(”ListPreference”, “unset”);

     监听设定变化问题    普通布局里的监听  比较简单 先通过findViewById()获得目标View  再在其上注册监听器即可 
    但是 PreferenceActivity 并没有提供findViewById()  也就无法监听 那么 怎么做呢?   - 得到SharedPreferences 句柄 

    sp = PreferenceManager.getDefaultSharedPreferences(this);

    在 sp 之上注册改变监听器 

    sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){
    @Override
    //sharedPreferences:句柄
    //key: 改变 键值
    public void onSharedPreferenceChanged(
    SharedPreferences sharedPreferences, String key) {
    // TODO Auto-generated method stub
    if(key.equals("autoBack")){
    Boolean autoBack = sharedPreferences.getBoolean("autoBack", false);
    if(autoBack){
    Log.d("TAG","autoBack: true!");
    }
    else {
    Log.d("TAG","autoBack: false!");
    }
    }
    }
    });


    Android提供了Preference供应用可以进行功能设置以及属性配置等操作,检查android.preference可以看到 Preference下有若干子类,例如常用的EditTextPreferenceCheckBoxPreference、 ListPreference等。

  • 相关阅读:
    signals系列之一——基本用法
    libevent系列之一——libevent介绍
    memcached完全剖析系列——一、memcached基础
    分布式算法一——一致性hash算法
    spring容器启动过程
    dubbo源码之四——服务发布二
    dubbo源码之四——dubbo服务发布
    dubbo源码之三——dubbo重构
    dubbo源码之三-模块依赖
    [模板](luogu P3387)縮點
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300615.html
Copyright © 2011-2022 走看看