Android Preference 须知

Android Preference 须知

一、理论

 

1.前言

在Android的应用开发中经常会涉及到设置界面的设计开发,为此Android提供了名为Preference的设置处理机制,沿用这种机制的话能省去开发者很多不必要的时间开支。

那Preference究竟是什么呢?看一下你Android手机里的“设置”这个应用就知道了,大体界面如下:


这个设置界面就是通过Preference构建的,可能有些同学会说,这不就是一个普通的LinearLayout吗?有什么特别的?下面我们就开具体说说什么是Preference。

 

2.什么是Preference?

Preference翻译过来是“偏爱,爱好”的意思,在Android中Preference是一个具体的类,它代表着一个最基本的UI块(可以理解为ListView中的一个item),并且显示在Activity或Fragment内置的ListView上面,如图1-1中的“声音”选项,就是一个Preference的UI块表现(这里为什么要说表现呢?因为Preference本身并不是继承View的视图类,它只是代表着一个偏好选项然后通过提供UI块来展示这些偏好选项)。并且每一个UI块都会和一个SharePreferences关联来保存或恢复偏好设置。

 

3.Preference从何而来?

得到Preference的方法有两种:一种是从Xml文件中获取,在Xml文件中每一个节点都能指定特定的Preference的子类。另外一种方法就是在代码中动态的创建。为了处理好Preference与SharePreferences的关联,Preference类提供了一个Key来作为使用SharePreferences时的Key。


4.Preference的子类们



开关类型:

TwoStatePreference是一个抽象类,它下面的两个子类CheckBoxPreference和SwitchPreference。

 

弹出框类型:

弹出框类型的都继承子虚拟类DialogPreference,分别是EditPreference,MultiCheckPreference,ListPreference,MultiSelectListPreference,SeekBarDialogPreference,VolumePreferenc。

 

特殊:

RingtonePreference和SeekBarPreference分别是铃声选择和滑块。

 

组类型:

组类型都继承子抽象类PreferenceGroup,其中PreferenceCategory表示分类,PreferenceScreen主要用来表示一个设置界面中的根节点。


5.Preference其他相关类介绍:

GenericInflater:用于解析xml文件

 

PreferenceInflater:继承自GenericInflater用于解析包含Preference的xml

 

PreferenceActivity:在kk和之前的版本上用于显示一系列Preference的Header(标头,用于跳转到对应的PreferenceFragment),从L开始PreferenceActivity的功能被PreferenceFragment集成了。

 

PreferenceFragment:用ListView来显示一系列Preference的层次结构。

 

PreferenceManager:用于帮助从xml或代码中创建Preference的层次结构。


二、实践

 

1.从xml文件中构建Preference ,主要代码如下:

----PreferencesFromXml.java----

 @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Load the preferences from an XMLresource
        //这个方法在L上已经不被提倡使用
        addPreferencesFromResource(R.xml.preferences);
    }
 

preferences文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!--BEGIN_INCLUDE(preferences) -->
<PreferenceScreen
       xmlns:android="http://schemas.android.com/apk/res/android">
 
    <PreferenceCategory
           android:title="@string/inline_preferences">
           
        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="@string/title_checkbox_preference"
                android:summary="@string/summary_checkbox_preference" />
 
    </PreferenceCategory>
               
    <PreferenceCategory
           an
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值