android-settings添加字体更换-前篇-setting简单一览

来源:互联网 发布:c高级编程 编辑:程序博客网 时间:2024/06/05 10:51

因为要在设置里面添加字体的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来获取对象,进行设置侦听,处理。

原创粉丝点击