1. 程式人生 > >android-settings新增字型更換-前篇-setting簡單一覽

android-settings新增字型更換-前篇-setting簡單一覽

因為要在設定裡面新增字型的featrue ,學習了一下android裡面的settings。

進入原始碼檢視,Settings.java ,根據繼承關係,實際上就是一個ListActivity。

他的佈局在XML裡面用<prefefence-headers></>來包含<header/ >節點。

因為是ListActivity,本質上用一個ListVIew,設定Adapter來佈局。特別的是,定義內部類HeaderAdapter,類中設定三種樣式(分類、一般、開關)。

eg.根據XML的Header的屬性來確定ItemView的樣式

static int getHeaderType(Header header) {
            if (header.fragment == null && header.intent == null) {
                return HEADER_TYPE_CATEGORY;
            } else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings) {
                return HEADER_TYPE_SWITCH;
            } else {
                return HEADER_TYPE_NORMAL;
            }
        }


設定介面卡的時候,從XML獲取<header>節點,加入到Adapter的陣列中。顯示時,獲取節點Fragment。

--

總之,新增一個選項時,新增一個header,設定對應的圖示,文字,設定樣式。

而我們是在已有的顯示的選項目錄下面,新增一個選項。

Display_setting.java 和自己寫的偏好設定一樣,我們來看他的XML檔案的佈局。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:title="@string/display_settings"
        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">


        <com.android.settings.BrightnessPreference
                android:title="@string/brightness"
                android:persistent="false"/>


        <PreferenceScreen
                android:key="wallpaper"
                android:title="@string/wallpaper_settings_title"
                android:fragment="com.android.settings.WallpaperTypeSettings" />


        <CheckBoxPreference
            android:key="accelerometer"
            android:title="@string/accelerometer_title"/>


        <ListPreference
                android:key="screen_timeout"
                android:title="@string/screen_timeout"
                android:summary="@string/screen_timeout_summary"
                android:persistent="false"
                android:entries="@array/screen_timeout_entries"
                android:entryValues="@array/screen_timeout_values" />


        <PreferenceScreen
                android:key="screensaver"
                android:title="@string/screensaver_settings_title"
                android:fragment="com.android.settings.DreamSettings" />


        <com.android.settings.WarnedListPreference
                android:key="font_size"
                android:title="@string/title_font_size"
                android:summary="@string/summary_font_size"
                android:entries="@array/entries_font_size"
                android:entryValues="@array/entryvalues_font_size"
                android:dialogTitle="@string/dialog_title_font_size" />


        <CheckBoxPreference
            android:key="notification_pulse"
            android:title="@string/notification_pulse_title"
            android:persistent="false" />


        <PreferenceScreen
                android:key="wifi_display"
                android:title="@string/wifi_display_settings_title"
                android:fragment="com.android.settings.wfd.WifiDisplaySettings" />

對於這種結構,可參考View的(groupview&view)。

--我們新增一個PreferenceScreen,裡面設定一個Intent,設定包名,啟動類,跳轉到我們自己的apk。

--其他的可以通過key來獲取物件,進行設定偵聽,處理。