PreferenceFragment
在Android3.0之前,设置界面使用PreferenceActivity,在Android3.0之后,官方推荐使用PreferenceFragment,对应于碎片化技术。
使用
新建Fragment
新建GeneralPreferenceFragment 继承PreferenceFragment,加载选项配置xml文件。
public static class GeneralPreferenceFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.pref_general);setHasOptionsMenu(true);// Bind the summaries of EditText/List/Dialog/Ringtone preferences// to their values. When their values change, their summaries are// updated to reflect the new value, per the Android Design// guidelines.bindPreferenceSummaryToValue(findPreference("example_text"));bindPreferenceSummaryToValue(findPreference("example_list"));}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == android.R.id.home) {startActivity(new Intent(getActivity(), SettingsActivity.class));return true;}return super.onOptionsItemSelected(item);}}
新建xml文件
在res文件夹目录下新建xml文件夹,在xml文件夹新建pref_general.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><SwitchPreferenceandroid:defaultValue="true"android:key="example_switch"android:summary="@string/pref_description_social_recommendations"android:title="@string/pref_title_social_recommendations" /><!-- NOTE: EditTextPreference accepts EditText attributes. --><!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. --><EditTextPreferenceandroid:capitalize="words"android:defaultValue="@string/pref_default_display_name"android:inputType="textCapWords"android:key="example_text"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_display_name" /><!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog todismiss it. --><!-- NOTE: ListPreference's summary should be set to its value by the activity code. --><ListPreferenceandroid:defaultValue="-1"android:entries="@array/pref_example_list_titles"android:entryValues="@array/pref_example_list_values"android:key="example_list"android:negativeButtonText="@null"android:positiveButtonText="@null"android:title="@string/pref_title_add_friends_to_messages" /></PreferenceScreen>
- PreferenceScreen:根标签。
- SwitchPreference:开关标签
- EditTextPreference:编辑标签
- ListPreference:集合标签,多选一。
效果图

分类
使用PreferenceCategory标签进行分类。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><!-- NOTE: EditTextPreference accepts EditText attributes. --><!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. --><PreferenceCategoryandroid:key="@string/pref_header_mqtt"android:summary="@string/pref_header_mqtt"android:title="@string/pref_header_mqtt"><EditTextPreferenceandroid:capitalize="characters"android:defaultValue="@string/pref_defult_mqtt_ip"android:inputType="textCapWords"android:key="@string/pref_key_mqtt_ip"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_mqtt_ip"android:summary="@string/pref_defult_mqtt_ip" /><EditTextPreferenceandroid:capitalize="characters"android:defaultValue="@string/pref_defult_mqtt_port"android:inputType="textCapWords"android:key="@string/pref_key_mqtt_port"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_mqtt_port"android:summary="@string/pref_defult_mqtt_port" /><EditTextPreferenceandroid:capitalize="characters"android:defaultValue="@string/pref_defult_mqtt_topic"android:inputType="textCapWords"android:key="@string/pref_key_mqtt_topic"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_mqtt_topic"android:summary="@string/pref_defult_mqtt_topic"/><EditTextPreferenceandroid:capitalize="characters"android:defaultValue="@string/pref_defult_mqtt_user"android:inputType="textCapWords"android:key="@string/pref_key_mqtt_user"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_mqtt_user"android:summary="@string/pref_defult_mqtt_user"/><EditTextPreferenceandroid:capitalize="characters"android:defaultValue="@string/pref_defult_mqtt_pswd"android:inputType="textCapWords"android:key="@string/pref_key_mqtt_pswd"android:maxLines="1"android:selectAllOnFocus="true"android:singleLine="true"android:title="@string/pref_title_mqtt_pswd"android:summary="@string/pref_defult_mqtt_pswd"/></PreferenceCategory>
</PreferenceScreen>
使用Header跳转页面
使用preference-headers进行实现,在res/xml文件夹新建pref_headers.xml
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"><!-- These settings headers are only used on tablets. --><headerandroid:fragment="com.pax.preference.SettingsActivity$GeneralPreferenceFragment"android:icon="@drawable/ic_info_black_24dp"android:title="@string/pref_header_general" /><headerandroid:fragment="com.pax.preference.SettingsActivity$NotificationPreferenceFragment"android:icon="@drawable/ic_notifications_black_24dp"android:title="@string/pref_header_notifications" /><headerandroid:fragment="com.pax.preference.SettingsActivity$DataSyncPreferenceFragment"android:icon="@drawable/ic_sync_black_24dp"android:title="@string/pref_header_data_sync" /></preference-headers>
在Activity中设置xml
@Override@TargetApi(Build.VERSION_CODES.HONEYCOMB)public void onBuildHeaders(List<Header> target) {loadHeadersFromResource(R.xml.pref_headers, target);}
进行平板适配,这种方式可以适配平板显示。
private static boolean isXLargeTablet(Context context) {return (context.getResources().getConfiguration().screenLayout& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;}
平板显示效果

手机显示效果

致谢
感谢观看,欢迎评论和点赞!









