Android的設置界面及Preference使用


一般來說,我們的APP都會有自己的設置頁面,那么其實我們有非常簡單的制作方法。老樣子,先看效果圖。


然后就是看源代碼了。

 第一步,先在res文件夾中新建一個xml文件夾,用來存放preferences.xml文件

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="顯示一排偏好">
        <CheckBoxPreference
            android:key="checkbox_preference"
            android:summary="這是一個開關按鈕"
            android:title="開關偏好" />
    </PreferenceCategory>
    <PreferenceCategory android:title="基於對話框的偏好">
        <EditTextPreference
            android:dialogTitle="輸入你的寵物"
            android:key="edittext_preference"
            android:summary="使用一個文本框對話框"
            android:title="文本輸入偏好" />
        <ListPreference
            android:dialogTitle="選擇一個"
            android:entries="@array/entries_list_preference"
            android:entryValues="@array/entryvalues_list_preference"
            android:key="list_preference"
            android:summary="使用一個列表對話框"
            android:title="列表偏好" />
    </PreferenceCategory>
    <PreferenceCategory android:title="啟動偏好">
        <PreferenceScreen
            android:key="screen_preference"
            android:summary="顯示另一個偏好屏幕"
            android:title="屏幕">

            <CheckBoxPreference
                android:key="next_screen_checkbox_preference"
                android:summary="另一個屏幕上的偏好"
                android:title="開關偏好" />
        </PreferenceScreen>

        <PreferenceScreen
            android:summary="通過意圖啟動一個Activity"
            android:title="意圖偏好">
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.baidu.com" />
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceCategory android:title="偏好屬性">
        <CheckBoxPreference
            android:key="parent_checkbox_preference"
            android:summary="這是一個父開關"
            android:title="父開關" />
        <CheckBoxPreference
            android:dependency="parent_checkbox_preference"
            android:key="child_checkbox_preference"
            android:layout="?android:attr/preferenceLayoutChild"
            android:summary="這是一個子開關"
            android:title="子開關" />
    </PreferenceCategory>
</PreferenceScreen>

 第二步,在string.xml文件中添加項數組

<resources>
    <string name="app_name">My Application</string>
        <string-array name="entries_list_preference">
            <item>IT</item>
            <item>Commerce</item>
            <item>HR</item>
        </string-array>
        <string-array name="entryvalues_list_preference">
            <item>001</item>
            <item>002</item>
            <item>003</item>
        </string-array>
    </resources>

 第三步,讓Activity繼承PreferenceActivity(其實這種方式目前會提示過期,但是沒關系),然后在重寫onCreate方法,添加preferences.xml作為顯示界面。

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      setContentView(R.layout.activity_setting);
        addPreferencesFromResource(R.xml.preferences);
    }

做到這一步,其實已經可以運行並看到效果了。但那么我們要如何拿到這些數據呢?那么修改下 代碼

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
        boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
        String text = sp.getString("edittext_preference", "");
        String listtext = sp.getString("list_preference", "");
        Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
    }

可是有的時候我們如果希望更改后立馬被系統獲知選項已被更改,又該如何?復寫繼承了PreferenceActivity的類中的onPreferenceTreeClick方法,這個方法會在設置修改時觸發。

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        SharedPreferences sp = preference.getSharedPreferences();
        boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
        Log.i("lenve", ON_OFF+"");
        String text = sp.getString("edittext_preference", "");
        Log.i("lenve", text+"");
        String listtext = sp.getString("list_preference", "");
        Log.i("lenve", listtext+"");
        boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
        Log.i("lenve", next_screen+"");
        return true;
    }

好了,啰嗦到現在,我們直接看整個MainActivity的代碼吧

package com.example.linfeng.myapplication;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.util.Log;

public class MainActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
        boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
        String text = sp.getString("edittext_preference", "");
        String listtext = sp.getString("list_preference", "");
        Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
    }


    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        SharedPreferences sp = preference.getSharedPreferences();
        boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
        Log.i("lenve", ON_OFF+"");
        String text = sp.getString("edittext_preference", "");
        Log.i("lenve", text+"");
        String listtext = sp.getString("list_preference", "");
        Log.i("lenve", listtext+"");
        boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
        Log.i("lenve", next_screen+"");
        return true;
    }
}

就這么簡單。OK啦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM