android-settings新增字型更換-前篇-setting簡單一覽
阿新 • • 發佈:2018-12-26
因為要在設定裡面新增字型的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來獲取物件,進行設定偵聽,處理。