Preference(二)--具体使用

781 阅读1分钟

「这是我参与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布局