PreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preference和fragment的结合更加便利地写出一个settings页面,下面来介绍PreferenceScreen和fragment结合方法,对于直接创建PreferenceActivity的方法,这里我就不讲了!
1. 首先,我们新建一个资源文件,类型是Preference,为了方便管理我们在res资源文件夹里新建一个名为xml的文件夹,存放我们的资源文件
鼠标右键xml/new/xml resouce file,我们新建一个settingsfragment.xml文件
在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>
大概长这样子:
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页面就做出来了,效果图如下:
先介绍到这里,如有错误欢迎指出,接受各位的批评!下次介绍Preference的相关控件的简单使用,告辞!