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>

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏工科狗和生物喵

【闲来无事,py写game】一个问答游戏Trivia -来自《Python游戏编程入门》

正文之前 嗯,没错,我只是为了规范化,就写这么多了!要洗澡了,明早有事! ? 正文 Trivia是一款书籍阅读类软件,支持Android 2.3.3。具体的...

3677
来自专栏前端布道

前端开发必备之Emmet

·介绍 Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具。 基本上,大多数的文本编辑器都会允许你存储和重用一些代码块,我们...

3054
来自专栏三流程序员的挣扎

Android UI 测试 - Espresso

Android UI 测试框架,在真机运行,相比手动测试,相当于把流程自动化了,并且自动监测结果。

561
来自专栏hotqin888的专栏

HydroWS水利供水管线设计工具——程序设计架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

711
来自专栏令仔很忙

新手学HighCharts(一)----基本使用

最近做的项目需要用到数据分析,图表显示,之前做项目的时候用到过highcharts,不过也只是简单的会用而已,然后再网上查了查highcharts的优点:

761
来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先 前情回顾 在上一篇博文《Vue2+VueRout...

1966
来自专栏木宛城主

ASP.NET MVC使用Bootstrap系列(2)——使用Bootstrap CSS和HTML元素

Bootstrap提供了一套丰富CSS设置、HTML元素以及高级的栅格系统来帮助开发人员快速布局网页。所有的CSS样式和HTML元素与移动设备优先的流式栅格系统...

3108
来自专栏逸鹏说道

WP、Win10开发或者WPF开发时绘制自定义窗体~例如:一个手机

WP and Win10 效果:(数字是参考值,和UI无关) ? <Page x:Class="_05.AllControls._BorderUsePa...

3395
来自专栏移动端周边技术扩展

iOS打开系统功能对应的URL

1543
来自专栏菩提树下的杨过

WritableBitmapEx 一瞥

今天在蓝色上看到一篇介绍WritableBitmapEx的贴子(是开源项目),项目地址:http://writeablebitmapex.codeplex.co...

1738

扫码关注云+社区