Android Preference使用

Android Preference常用在例如設置的功能,Android提供preference這個鍵值對的方式來處理這種狀況,自動保存這些數據,並立時生效,這種就是使用android sharedpreferences方式進行保存的,不須要咱們手動來寫,下面的圖片就是使用Preference來進行保存的android

 

 

 

 

 

添加一個簡單的Preference數組

 

 

 

 

 

 

咱們在res目錄下添加一個xml目錄,裏面添加一個itchq文件,這個文件至關於咱們的Preference佈局文件ide

 

複製代碼佈局

<?xml version="1.0" encoding="utf-8"?>spa

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >xml

    

    <CheckBoxPreference 對象

        android:key="checkbox"繼承

        android:title="CheckBoxPreference"接口

        android:summary="check it box"three

        />

    <RingtonePreference

        android:key="ring"

        android:title="ringtone"

        android:summary="check a ringtone"

        />

</PreferenceScreen>

複製代碼

這個就是itchq.xml裏面的代碼,這裏面的東西往下有介紹。咱們再來看看那個Activity裏面如何使用的

 

複製代碼

package com.itchq.itchqpreference;

import com.itchq.itchqpreference.R;

 

import android.os.Bundle;

import android.preference.CheckBoxPreference;

import android.preference.PreferenceActivity;

import android.preference.RingtonePreference;

 

 

public class ItChqActivity extends PreferenceActivity{

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.itchq);

    }

    

}

複製代碼

上面的就是Activity的代碼,這個Activity不是繼承Activity這個類的而是PreferenceActivity,其實這個看字面的意思就是Activity的繼承子類,用法和Activity差很少相同的,在Activity中使用setContentView()方法來加載一個佈局文件,在這裏使用的是addPreferencesFromResource()方法來加載佈局文件,既然是Activity就不要忘記在AndroidManifast.xml添加相應的配置, 

 

 

 

 

 

  preference 通用的xml 佈局屬性

 

在preference佈局文件中,咱們能夠會常常用到下面的屬性,這些屬性都是preference控件相互通用的。

 

android:key                            這個屬性至關於android:id的做用。用此key來惟一表示此Preference

 

android:title                            Preference的標題,

 

android:summary                   表示Preference提示語,相對於android:title來講顯示要小點,並且顯示位置在android:title下面

 

android:defaultValue               這個表示的是默認值,好比CheclPreference這種preference就能夠指定默認是"true"仍是「false」

 

android:enabled                      表示該Preference是否可用狀態

 

PreferenceScreen

 

preferenceScreen簡單的說就是全部Preference元素的根節點,咱們能夠看作是每個PrederenceActivity佈局的開始元素,固然這個PreferenceScreen也能夠做爲一個組件出現,裏面能夠嵌套其它組件,那麼這個將會以另外的一屏顯示出來,就是當咱們點擊後出現一個新的屏幕

 

 

 

複製代碼

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    

    <CheckBoxPreference 

        android:key="checkbox"

        android:title="CheckBoxPreference"

        android:summary="check it box"

        />

    <RingtonePreference

        android:key="ring"

        android:title="ringtone"

        android:summary="check a ringtone"

        />

    <PreferenceScreen 

        android:key="screen"

        android:title="PreferenceScreen"

        android:summary="screen it"

        >

        <SwitchPreference

            android:key="switch"

            android:title="switchPreference"

            android:summary="switch it"

            />

        <EditTextPreference

            android:key="edit"

            android:title="editPreference"

            android:summary="OK"

            />

    </PreferenceScreen>

</PreferenceScreen>

複製代碼

 

 

如上面的代碼裏面有一個PreferenceScreen,這個PreferenceScreen裏面嵌套了SwitchPreference和EditTextPreference,android:key至關android:id,咱們到時候經過這個在Activity中找到對應的組件,android:title就是標題,android:summary就是這個一個提示語,這三個屬性都是最基本的信息,看下圖:

 

 

 

上面圖片中最後一項就是咱們添加的,「PreferenceScreen」就是咱們的android:title,「screen it」就是這個android:summary,那麼當咱們點擊這個選項時就會跳轉到一個新的頁面,頁面顯示以下圖:

 

 

 

這個就是上面的在PreferenceScreen中嵌套的兩個組件,SwitchPreference和EditTextPreference

 

 

 

PreferenceCategory

 

PreferenceCategory 這個控件相似於LinearLayou、RelativeLayout,用於組合一組Preference,使佈局看起來具備層次關係,美觀

 

 

 

複製代碼

    <PreferenceCategory 

        android:key="category"

        android:title="PreferenceCategory"

        >

         <EditTextPreference

            android:key="edit"

            android:title="category"

            android:summary="OK"

            />

    </PreferenceCategory>

複製代碼

 

 

 

 

如上圖中Category前面有一天很大的線,這個就是使用了PreferenceCategory效果。

 

 

 

Preference這個控件這裏簡單介紹一下,這個就和咱們的TextView是同樣的,就是顯示一個文本

 

 

 

ListPreference

 

ListPreference這個就是顯示一個至關的list,先看下面的代碼

 

 

 

複製代碼

    <ListPreference 

        android:key="list"

        android:title="Options"

        android:entries="@array/entry_list"                    

        android:entryValues="@array/values_list"

        android:dialogTitle="list dialogtitle"

        android:defaultValue="1"

        />

複製代碼

 

 

咱們能夠看到在這個代碼中android:entries屬性表示的就是這個listView對話框控件欲顯示的文本,android:entryValues與文本相對應的key-value鍵值對,value保存至sharedPreference文件,而咱們的entries和entryValue屬性使用的數組定義在資源文件arrays.xml的數組名,咱們來看看arrays.xml文件的定義

 

複製代碼

<resources>

    

    <string-array name="entry_list">

        <item>total</item>

        <item>check</item>

        <item>airplace</item>

    </string-array>

    <string-array name="values_list">

        <item>0</item>

        <item>1</item>

        <item>2</item>

    </string-array>

</resources>

複製代碼

這個就是arrays.xml文件的定義,android:dialogTitle是指這個list彈出框的文本,android:defauleValues表示在缺省條件下顯示哪一個值,這個值對應的是values_list的值,咱們先來看看效果

 

 

 

如圖這個Options就是咱們要ListPreference,當咱們點擊這個以後顯示效果以下圖:

 

 

 

 

 

看到了把,咱們的這個dialog形式來顯示listView的,默認android:defaultValues=「1」就是對應第二個"check",這個標題就是android:dialogTitle設置的

 

CheckBoxPreference

 

checkBoxPreference這個至關於checkBox,是一個多選,先看代碼

 

 

 

複製代碼

    <CheckBoxPreference 

        android:key="checkbox_one"

        android:title="checbox_one"

        android:summaryOn="On_check_one"

        android:summaryOff="offcheck_one"

        />

    <CheckBoxPreference

        android:key="checkbox_two"

        android:summaryOff="offcheck_two"

        android:summaryOn="On_check_two"

        android:title="checbox_two" />

    <CheckBoxPreference

        android:key="checkbox_three"

        android:summaryOff="offcheck_three"

        android:summaryOn="On_check_three"

        android:title="checbox_three" />

複製代碼

android:summaryOn和android:summaryOff表示在選擇和不選擇分別顯示的summary,運行效果圖以下:

 

 

 

當咱們選擇checkbox_one是下面的offcheck_one提示就會修改成On_check_one

 

EditTextPreference

 

等同於EditText,相關的代碼顯示以下:

 

 

 

    <EditTextPreference android:key="edit"

       android:title="Set Package Name"

        android:summary="Set the Package Name"

        android:dialogTitle="Package Name:" /> 

 

 

 

 

當咱們點擊下面的「Set Package Name「的時候就會彈出這麼一個文本對話框,」Package Name「就是這個android:dialogTitle的屬性

 

RingtonePreference

 

這個是一個鈴聲選項的功能,用得比較少不作介紹

 

MultiSelectListPreference

 

它的實現和ListPreference類似,不一樣的是還能夠不選擇或者多個選擇,代碼是和ListPreference同樣的,運行效果以下圖:

 

 

 

從上面一些基本的Preference控件已經差很少介紹完了,下面再來介紹一個有關於點擊和存儲的功能使用:

 

首先來介紹一下如何在咱們的PreferenceActivity中找到咱們的控件,咱們在Activity是經過findViewById()來找到咱們指定的控件的,那麼在PreferenceActivity中咱們可使用findPreference這個方法來找到指定的方法,用法以下:

 

        mCheck=(CheckBoxPreference) findPreference("checkbox");

        mRing=(RingtonePreference) findPreference("ring");

findPreference裏面的參數就是咱們使用android:key所定義的,這個應該容易理解。

 

在PreferenceActivity方法中,一個比較重要的監聽點擊事件方法爲

 

 

 

複製代碼

    @Override

    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

            Preference preference) {

        // TODO Auto-generated method stub

        

        return true;

    }

複製代碼

 

 

參數 preference   表示的是點擊的對象,在咱們繼承PreferenceActivity能夠重寫該方法,來完成咱們對Preference事件的捕捉,用法以下

 

複製代碼

    @Override

    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

            Preference preference) {

        // TODO Auto-generated method stub

        if(preference.getKey().equals("checkbox")){

            Log.i("itchq", "checkbox");

        }

        return true;

    }

複製代碼

除了上面這個監聽的方法以外,還有兩個重要的接口:

 

OnPreferenceChangeListener

 

當Preference的元素值發送改變時,觸發該事件,記住只有元素值改變纔會觸發這個值,返回值爲true 表示將新值寫入sharedPreference文件中

 

false 則不將新值寫入sharedPreference文件

 

 

 

    @Override

    public boolean onPreferenceChange(Preference preference, Object newValue) {

        // TODO Auto-generated method stub

        return false;

    }

 

 

OnPreferenceClickListener

 

當點擊控件時觸發發生,能夠作相應操做

 

    @Override

    public boolean onPreferenceClick(Preference preference) {

        // TODO Auto-generated method stub

        return false;

    }

 

 

那麼這三個點擊事件在一塊兒是什麼用的呢?它的規則以下:

 

點擊某個Preference控件後,會先回調onPreferenceChange()方法,便是否保存值(這個下面會講解這個值是如何保存的),而後再回調onPreferenceClick以及onPreferenceTreeClick()方法,所以在onPreferenceClick/onPreferenceTreeClick方法中咱們獲得的控件值就是最新的Preference控件值。而後onPreferenceClick會比onPreferenceTreeClick()方法先調用,若是onPreferenceClick方法返回true,那就不會再調用onPreferenceTreeClick()方法,若是onPreferenceClick()返回false就會繼續調用onPreferenceTreeClick()方法

相關文章
相關標籤/搜索