###简介
PreferenceFragment , 展示一系列的Preference条目并且当与用户有交互时,产生的值会自动保存到SharedPreferences中,通过PreferenceManager#getDefaultSharedPreferences(android.content.Context)可以查看对应的SharedPreferences的值。展示的Preferences的风格会随着系统而改变,通过XML文件可以快速的创建Preferences,官方推荐使用Fragment来实现这类功能。
###创建XML
Tag意义PreferenceScreen必须作为根节点,代表整个Preferences屏幕PreferenceCategory一组Preferences,便于分类SwitchPreference两种状态的preference,开关ListPreference列表显示Preference, android:entries设置的内容是我们在设置时看到的内容,而android:entryValues就是保存在preferences.xml中的值CheckBoxPreference复选框Preference,勾选和不勾选RingtonePreferenceRingtone选择PreferenceEditTextPreference编辑类PreferenceMultiSelectListPreference多选类Preference###常用属性
属性用法android:title标题android:defaultValue默认值android:keySharedPreference中保存值时使用的Key值android:entries列表或者多选框的显示内容android:entryValues列表或者多选框保存过程中对应的值###代码使用 XML文件
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="无线和网络"> <SwitchPreference android:defaultValue="false" android:title="WLAN" android:key="switch_preference_wlan" /> <SwitchPreference android:defaultValue="false" android:title="蓝牙" android:key="switch_preference_bluetooth" /> <ListPreference android:defaultValue="1" android:title="休眠" android:entries="@array/pref_sleep_interval" android:entryValues="@array/pref_sleep_interval" android:key="list_preference_sleep" /> </PreferenceCategory> <PreferenceCategory android:title="设备" android:persistent="false" android:orderingFromXml="false"> <CheckBoxPreference android:defaultValue="false" android:title="静音" android:key="check_box_preference_virate" /> <RingtonePreference android:defaultValue="" android:title="铃声" android:key="ringtone_preference_ringtone" /> </PreferenceCategory> <PreferenceCategory android:title="隐私和安全"> <EditTextPreference android:defaultValue="Default value" android:selectAllOnFocus="true" android:singleLine="true" android:title="设备名称" android:key="edit_text_preference_devicename" /> <MultiSelectListPreference android:title="辅助功能" android:defaultValue="@array/pref_assit_function" android:entries="@array/pref_assit_function" android:entryValues="@array/pref_assit_function" android:key="multi_select_list_preference_assit" /> </PreferenceCategory> </PreferenceScreen>arrays.xml文件
<?xml version="1.0" encoding="utf-8"?> <resources> <array name="pref_sleep_interval"> <item>30秒</item> <item>1分钟</item> <item>2分钟</item> <item>5分钟</item> <item>10分钟</item> <item>30分钟</item> </array> <array name="pref_assit_function"> <item>灵犀一指</item> <item>指关节截屏</item> <item>通话录音</item> <item>白科技</item> <item>黑科技</item> </array> </resources>自定义PreferenceFragment PreferenceFragment是抽象类,需要自己实现
public class BaseFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { Toast.makeText(getActivity(), preference.toString() + " is Clicked", Toast.LENGTH_LONG).show(); return super.onPreferenceTreeClick(preferenceScreen, preference); } }Activity中使用
BaseFragment baseFragment = new BaseFragment(); FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.replace(xxxxxx,baseFragment); transaction.commit();###结果
SharedPreference结果<中文乱码是系统问题>
onlyloveyd 认证博客专家 Android Kotlin OpenCV 个人公众号【OpenCV or Android】,热爱Android、Kotlin、Flutter和OpenCV。毕业于华中科技大学计算机专业,曾就职于华为武汉研究所。目前在三线小城市生活,专注技术与研发。