• Android学习笔记(十四)方便实用的首选项-PreferenceActivity


      突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家。其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceActivity在使用起来还是非常方便与实用的,再加上介绍PreferenceActivity的貌似不太多,还是发出来吧,以备自己和其他人后期参考。

      Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的Preferences Screen。通过使用该框架,能够确保应用程序中的PreferenceActivity与本地和其他第三方应用程序中所使用的一致。当然,如果对PreferenceActivity深入研究起来还是有一定复杂度的,这里只介绍一些最常用的。

      一、创建Preference Screen布局。

      首先需要在xml文件中创建Preference Screen布局以供PreferenceActivity调用。与标准UI布局不同,首选项定义存储在res/xml资源文件夹中。方便的时,有很多控件都已经定义好,我们直接添加到Preference Screent中使用就可以了,一些原生的首选项控件如下:

      · CheckBoxPreference :一个标准的首选项复选框空GIA你,用于将首选项设置为真或者假。

      · EditTextPreference :允许用户输入一个字符串作为一个首选项。在运行时选择首选项文本将会显示一个输入对话框。

      · ListTextPreference :该首选项是一个包含了可供选择的值的列表。可以定义不同的数组用于包含显示文本和选项值。

      · MultiSelectPreference :在Activity 3.0(API level 11)中引入的首选项,类似于复选框列表。

      · RingtonePreference : 一个专用的列表首选项,显示可供用户选的可用铃声列表。

      除了一些原生的首选项控件外,还可以通过扩展Preference类自定义首选项控件。

      下面在res/xml下创建preference_activity.xml,在里面添加几个控件,代码如下:(注意:在创建时注意将Resource Type选为 Preference类型,file要小写)

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <CheckBoxPreference 
     4         android:key="checkbox"
     5         android:title="开关"
     6         android:summaryOn="开"
     7         android:summaryOff="关"/>
     8     
     9     <ListPreference 
    10         android:key="list"
    11         android:title="选择"
    12         android:summary="请选择"
    13         android:entries="@array/entries"
    14         android:entryValues="@array/values"/>
    15     
    16     <EditTextPreference 
    17         android:key="edit"
    18         android:title="title"
    19         android:summary="summary"
    20         android:dialogTitle="dialogTitle"
    21         android:dialogMessage="dialogMessage"/>
    22 
    23 </PreferenceScreen>

     其中ListPreference控件用到得entries和values如下(在res/values/list_pf.xml):

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3     <string-array 
     4         name="entries">
     5         <item ></item>
     6         <item ></item>
     7         <item ></item>
     8     </string-array>
     9     <string-array name="values">
    10         <item >第一项</item>
    11         <item >第二项</item>
    12         <item >第三项</item>
    13     </string-array>
    14 </resources>

      二、创建PreferenceActivity的子类

      类似于创建一个Activity,可以通过继承PreferenceActivity创建一个其子类,并通过addPreferencesFromResource(R.xml.preference_activity)方法加载Preference Screen文件。各控件的具体用法,请参考注释。

     1 /**
     2  * 
     3  * @author liuwei
     4  * @data 2015/11/08
     5  */
     6 public class MyPreferenceActivity extends PreferenceActivity {
     7     PreferenceManager pm;
     8     CheckBoxPreference checkbox;
     9     ListPreference listP;
    10     EditTextPreference editP;
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         addPreferencesFromResource(R.xml.preference_activity);
    16         // 获取PreferenceManager对象
    17         pm = getPreferenceManager();
    18 
    19         /**************** 绑定checkbox控件 *******************/
    20         checkbox = (CheckBoxPreference) pm.findPreference("checkbox");
    21         // 获取控件状态
    22         boolean n = checkbox.isChecked();
    23         Toast.makeText(getApplicationContext(), "当前状态为:" + n, 0).show();
    24 
    25         /**************** 绑定listP控件 **********************/
    26         listP = (ListPreference) pm.findPreference("list");
    27         // 获取listP控件的key和value
    28         CharSequence e = listP.getEntry();
    29         String v = listP.getValue();
    30         Toast.makeText(getApplicationContext(), e + ":" + v, 0).show();
    31 
    32         /**************** 绑定editP控件 **********************/
    33         editP = (EditTextPreference) pm.findPreference("edit");
    34         // 获取控件内容
    35         String edit = editP.getText();
    36         Toast.makeText(getApplicationContext(), "编辑内容:" + edit, 0).show();
    37     }
    38 }

      别忘了AndroidManifest.xml中配置,如下:

    <activity 
        android:name=".MyPreferenceActivity">
    </activity>
    

      最后试试效果,还是挺棒的。

  • 相关阅读:
    dependencies 和 devDependencies 区别
    safari下地址跳转bug
    forEach,map和filter的区别
    设置video标签的默认样式
    还不懂移动端适配快看这篇文章
    使用微信帐号登录网站的实现
    基于阿里云市场API服务实现增值税发票识别【OCR】
    词云wordcloud的实现
    数据统计的简单实现思路
    京东联盟API简易PHP接口类
  • 原文地址:https://www.cnblogs.com/codingblock/p/4890110.html
Copyright © 2020-2023  润新知