PreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preference和fragment的结合更加便利地写出一个settings页面,下面来介绍PreferenceScreen和fragment结合方法,对于直接创建PreferenceActivity的方法,这里我就不讲了!

1. 首先,我们新建一个资源文件,类型是Preference,为了方便管理我们在res资源文件夹里新建一个名为xml的文件夹,存放我们的资源文件

Presto 设置高级参数 preference settings设置_资源文件

鼠标右键xml/new/xml resouce file,我们新建一个settingsfragment.xml文件

Presto 设置高级参数 preference settings设置_android_02

在settingsfragment.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="prefAndroid"
            android:title="安卓"
            android:summary="点一下更新内容"/>
        <Preference
            android:key="prefIos"
            android:title="IOS"
            android:summary="可以作为一个设置项"/>
        <CheckBoxPreference
            android:key="prefCheckBoxOne"
            android:title="这相当于一个CheckBox"/>
        <CheckBoxPreference
            android:key="prefCheckBoxTwo"
            android:title="还可以设置summary"
            android:summaryOn="选中了"
            android:summaryOff="没选中"/>
        <EditTextPreference
            android:key="prefEditText"
            android:title="这相当于一个EditText"
            android:summary="我是EditText的一个summary"/>
        <ListPreference
            android:key="prefList"
            android:title="这相当于一个List表"/>
    </PreferenceCategory>

   <PreferenceCategory
        android:key="prefCategoryTwo"
        android:title="Inactive" >
        <MultiSelectListPreference
            android:key="prefMultiSelect"
            android:title="这相当于一个MultiSelect"/>
        <SwitchPreference
            android:key="prefSwitch"
            android:title="这相当于一个Switch"
            android:switchTextOn="switchTextOn选中了"
            android:switchTextOff="switchTextOff没选中"
            android:summaryOn="summaryOn选中了"
            android:summaryOff="summaryOff没选中"
            android:shadowColor="#0df10d"/>
        <RingtonePreference
            android:key="prefRingtone"
            android:title="这相当于一个"
            android:summary="请选择铃声"
            android:icon="@mipmap/ic_launcher_round"/>
    </PreferenceCategory>
 </PreferenceScreen>

大概长这样子:

Presto 设置高级参数 preference settings设置_android_03

2. 然后再新建一个名为Settings的空(empty)activity,这里就不多说了,关键是新建以后

3. 在class文件里新建一个settingsfragment类继承PreferenceFragment类

SettingsByPrenference.class文件

public class SettingsByPrenference extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings_by_prenference);
    }

    public static class SettingsFragment extends PreferenceFragment{
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settingsfragment);
        }
    }
}

addPreferencesFromResource(R.xml.settingsfragment)这行代码是添加preference的布局

关于如何快速引入重写方法,新手可能比较纠结,使用Ctrl+o快捷键可以快速添加,这个小技巧大大方便你的敲代码。

4. 然后我们转到刚才新建的activity的布局文件,在布局文件里添加一个fragment,通过fragment来将preference的资源文件引进来。

activity_settings_by_prenference.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.a14392.csdn_example.SettingsByPrenference">
    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/settingsFragment"
    android:name="com.example.a14392.csdn_example.SettingsByPrenference$SettingsFragment"/>
</LinearLayout>

注意: fragment要有id,即使用不上id,也要对id进行设置,否则运行时会报布局加载错误。

5. 这样一个settings页面就做出来了,效果图如下:

Presto 设置高级参数 preference settings设置_资源文件_04

先介绍到这里,如有错误欢迎指出,接受各位的批评!下次介绍Preference的相关控件的简单使用,告辞!