PreferenceActivity的使用

1.PreferenceActivity主要應用與對用戶的偏好設置,通過它的命名也可以看出來這點!

我們都知道Android持久化有四種SQLite、文件存儲、Preference、ContentProvider

而其中Preference是以類似Map的鍵值對形式存儲的,最適合用來保存用戶個人設置之類的信息

2.怎麼來使用呢,只要一個類繼承它,並添加一個xml文件來創建它的頁面就可以了!

a.首先在res目錄下建立一個xml文件夾,然後新建一個preferences.xml文件

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

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

    <PreferenceCategory
            android:title="@string/steps_settings_title">
            
        <ListPreference
                android:key="sensitivity"
                android:title="@string/sensitivity_setting"
                android:summary="@string/sensitivity_setting_details"
                android:entries="@array/sensitivity_preference"
                android:entryValues="@array/sensitivity_preference_values"
                android:dialogTitle="@string/sensitivity_setting_title"
                android:defaultValue="30" />

        <ListPreference
                android:key="operation_level"
                android:title="@string/operation_level_setting"
                android:summary="@string/operation_level_setting_details"
                android:entries="@array/operation_level_preference"
                android:entryValues="@array/operation_level_preference_values"
                android:dialogTitle="@string/operation_level_setting_title"
                android:defaultValue="30" />

        <ListPreference
                android:key="units"
                android:title="@string/units_setting"
                android:summary="@string/units_setting_details"
                android:entries="@array/units_preference"
                android:entryValues="@array/units_preference_values"
                android:dialogTitle="@string/units_setting_title"
                android:defaultValue="imperial" />

        <cq.cake.pedometer.perferences.StepLengthPreference
                android:key="step_length"
                android:title="@string/step_length_setting"
                android:summary="@string/step_length_setting_details"
                android:dialogTitle="@string/step_length_setting_title"
                android:defaultValue="20" />
            
        <cq.cake.pedometer.perferences.BodyWeightPreference
                android:key="body_weight"
                android:title="@string/body_weight_setting"
                android:summary="@string/body_weight_setting_details"
                android:dialogTitle="@string/body_weight_setting_title"
                android:defaultValue="50" />
            
        <ListPreference
                android:key="exercise_type"
                android:title="@string/exercise_type_setting"
                android:summary="@string/exercise_type_setting_details"
                android:entries="@array/exercise_type_preference"
                android:entryValues="@array/exercise_type_preference_values"
                android:dialogTitle="@string/exercise_type_setting_title"
                android:defaultValue="running" />
                
        <ListPreference
                android:key="maintain"
                android:title="@string/maintain_setting"
                android:summary="@string/maintain_setting_details"
                android:entries="@array/maintain_preference"
                android:entryValues="@array/maintain_preference_values"
                android:dialogTitle="@string/maintain_setting_title"
                android:defaultValue="none" />

    </PreferenceCategory>
                
    <PreferenceCategory
            android:title="@string/voice_settings_title">
        <CheckBoxPreference
                android:key="speak"
                android:title="@string/voice_setting"
                android:summary="@string/voice_setting_details"
                android:defaultValue="false" />
        <ListPreference
                android:key="speaking_interval"
                android:title="@string/speaking_interval_setting"
                android:summary="@string/speaking_interval_setting_details"
                android:entries="@array/speaking_interval_preference"
                android:entryValues="@array/speaking_interval_preference_values"
                android:dependency="speak"
                android:defaultValue="1" />

        <PreferenceScreen
            android:key="tell_what"
            android:title="@string/tell_what"
            android:dependency="speak">
            
            <PreferenceCategory
                    android:title="@string/tell_what">
            
                <CheckBoxPreference
                        android:key="tell_steps"
                        android:title="@string/tell_steps_setting"
                        android:summary="@string/tell_steps_setting_details" 
                        android:defaultValue="false" />
                <CheckBoxPreference
                        android:key="tell_pace"
                        android:title="@string/tell_pace_setting"
                        android:summary="@string/tell_pace_setting_details" 
                        android:defaultValue="false" />
                <CheckBoxPreference
                        android:key="tell_distance"
                        android:title="@string/tell_distance_setting"
                        android:summary="@string/tell_distance_setting_details" 
                        android:defaultValue="false" />
                <CheckBoxPreference
                        android:key="tell_speed"
                        android:title="@string/tell_speed_setting"
                        android:summary="@string/tell_speed_setting_details" 
                        android:defaultValue="false" />
                <CheckBoxPreference
                        android:key="tell_calories"
                        android:title="@string/tell_calories_setting"
                        android:summary="@string/tell_calories_setting_details" 
                        android:defaultValue="false" />
                <CheckBoxPreference
                        android:key="tell_fasterslower"
                        android:title="@string/tell_fasterslower_setting"
                        android:summary="@string/tell_fasterslower_setting_details" 
                        android:defaultValue="false" />
            </PreferenceCategory>
        </PreferenceScreen>
    </PreferenceCategory>


    
</PreferenceScreen>


b.然後創建一個Settings類來繼承PreferenceActivity,在onCreate裏面添加這個xml

package cq.cake.pedometer;

import android.os.Bundle;
import android.preference.PreferenceActivity;


public class Settings extends PreferenceActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        addPreferencesFromResource(R.xml.preferences);
    }
}


a-1 其中ListPreference是一個讓用戶選擇列表的形式出現控件,其中key代表鍵值,用於其它地方需要這個值得時候,通過PreferenceManager.getDefaultSharedPreferences(Context)的靜態方法,獲取到一個全局的Preference對象,再通過這個對象的get相關方法取值,例如:

SharedPreferences setPreference = PreferenceManager.getDefaultSharedPreferences(this);
        setPreference.getString("sensitivity","中等");//這裏默認就是取的【中等】值,如果沒有的話
例如這張圖片,可以選擇極低,但如果是第一次沒有選擇,則默認使用中等這個值

還有的屬性:title:標題  summary:描述 entries:顯示給用戶的數組值,我們可以保存在values下面的arrays.xml中,entryValues就是實際的數組值,dialogTitle表示彈出來的標題,defaultValue就是默認設置的值

 <string-array name="sensitivity_preference">
        <item>@string/extra_high</item>
        <item>@string/very_high</item>
        <item>@string/high</item>
        <item>@string/higher</item>
        <item>@string/medium</item>
        <item>@string/lower</item>
        <item>@string/low</item>
        <item>@string/very_low</item>
        <item>@string/extra_low</item>
    </string-array>

    <string-array name="sensitivity_preference_values">
        <item>1.9753</item>
        <item>2.9630</item>
        <item>4.4444</item><!-- 10 * 1.5^(-2) -->
        <item>6.6667</item><!-- 10 * 1.5^(-1) -->
        <item>10</item>
        <item>15</item><!--     10 * 1.5      -->
        <item>22.5</item><!--   10 * 1.5^2    -->
        <item>33.75</item>
        <item>50.625</item>
    </string-array>

a-2 EditTextPreference,爲文本編輯框配置控件,上面的preferences.xml中的StepLengthPreference自定義類就是繼承了它,裏面的屬性和第一個控件意思一樣

a-3 CheckBoxPreference,就是單選的喜好控件,其他屬性一樣,最後一個屬性defaultValue只能輸入false或true,代表了真假,和普通的CheckBox樣式區別不大,只是它是Preference類型的控件而已

a-4 PreferenceScreen代表了新的喜好界面,可以在這裏面嵌套它,點擊又會生成新的喜好界面。

a-5 PreferenceCategory就是喜歡界面的下個分組標籤,代表了一組屬性值



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章