「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」
使用
1. 在res新建一个xml的文件夹,在xml中新建一个资源(preference_demo.xml)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
android:key="categoryOne"
android:title="General">
<Preference
android:key="preference"
android:title="Preference"
android:summary="Preference的summary"/>
<CheckBoxPreference
android:key="checkBoxPreference"
android:title="CheckBoxPreference"
android:summary="CheckBoxPreference的summary"/>
<EditTextPreference
android:key="editTextPreference"
android:title="EditTextPreference"
android:summary="EditTextPreference的summary"/>
<SwitchPreference
android:key="switchPreference"
android:title="SwitchPreference"
android:switchTextOn="switchTextOn选中了"
android:switchTextOff="switchTextOff没选中"
android:summaryOn="summaryOn选中了"
android:summaryOff="summaryOff没选中"
android:shadowColor="#ff0000"/>
<ListPreference
android:key="prefList"
android:title="这相当于一个List表"/>
</PreferenceCategory>
</PreferenceScreen>
2. Activity实现
新建一个类(PreferenceActivity),继承PreferenceFragment,在onCreate()的时候直接调用addPreferencesFromResource(R.xml.preference_demo);
public class PreferenceActivity extends android.preference.PreferenceActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_demo);
}
}
3. Fragment实现(官方推荐)
新建一个类(PreferenceFragment),继承PreferenceActivity
public class PreferenceActivity extends android.preference.PreferenceActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_demo);
}
}
4. 数据存取
我们在已经知道Preference会以SharePreference形式存储,name为Preference的key值,value为Preference的value值,那么我们应该怎么取呢? 我们通过PreferenceManager.getDefaultSharedPreferences()获取
SharedPreferences preferences =PreferenceManager.getDefaultSharedPreferences(this)
如果想要清除呢?我们可以用remove()和clear()方法
- remove() 清除某个prefernece
- clear()清除所有的preferences
5. 为什么使用Preference
我们在app开发的时候,需要给用户体用一个页面,方便用户进行操作。如果我们通过布局去实现复杂的界面的话,会比较麻烦,不容易维护,因此Google设计了Prefernece,这样用户就可以使用SharedPreferences来进行本地数据的持久化,这样开发者只需要关心自己的功能,不用关心怎么存储的。
6. Preference相关
PreferenceActivity继承自ListActivity,在Android 3.0以前推荐使用,3.0以后推荐和Preferencefragment一起使用
Preference其实不是View,但是其内部创建管理了一个View(ListView的item,被Adapter的getView通过Preference.getView方法获得显示
7. Setting
Setting模块的主要路径 :/packages/apps/Settings/
Settings应用里面使用了大量了的Preference布局