赞
踩
首选项最常使用的地方是系统的设置列表或应用程序的设置页。本示例在android 4.0+上运行。
在res/xml文件下建立xml文件,设置需要的控件。下面的xml文件使用了PreferenceCategory 、CheckBoxPreference、ListPreference。PreferenceCategory 是一个标题栏分隔符,表示分类。CheckBoxPreference复选框控件。ListPreference列表单选控件。常用的属性有android:key、android:title、android:summary、android:defaultValue。android:key相当于控件的id,在xml文件是键值对的键。android:title显示的名称。android:summary对此控件的藐视或解释。android:defaultValue首选项的默认值,即键值对的默认值。
ListPreference中的 android:entries属性是引用的选项列表, android:entryValues属性引用了各个选项对应值的列表。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="设置">
<CheckBoxPreference
android:defaultValue="true"
android:icon="@mipmap/set"
android:key="PREF_CHECK_BOX"
android:summary="这里是描述"
android:title="Check 选项" />
<ListPreference
android:defaultValue="100"
android:entries="@array/size_entry"
android:entryValues="@array/size_entry_value"
android:icon="@mipmap/ic_launcher"
android:key="PREF_LIST"
android:summary="list 描述"
android:title="list选项" />
</PreferenceCategory>
</PreferenceScreen>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--选项列表-->
<string-array name="size_entry">
<item>大</item>
<item>中</item>
<item>小</item>
</string-array>
<!--选项值的列表-->
<string-array name="size_entry_value">
<item>大</item>
<item>中</item>
<item>小</item>
</string-array>
</resources>
创建一个类并继承PreferenceFragment,重写onCreate()方法。
public class PreferenceF extends PreferenceFragment{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//添加上面的xml文件
addPreferencesFromResource(R.xml.perference);
}
}
创建Activity,在布局文件中引用PreferenceFragment。
<fragment
android:id="@+id/fragment_pf"
//通过name引用PreferenceFragment
android:name="cn.xd.android8.pre.PreferenceF"
android:layout_width="match_parent"
android:layout_height="match_parent" />
运行效果如下:
//p_header.xml
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="cn.xd.android8.pre.PreferenceF"
android:icon="@mipmap/ic_launcher"
android:summary="这是header的描述"
android:title="header">
</header>
</preference-headers>
创建类并继承PreferenceActivity,重写onBuildHeaders()、isValidFragment()方法。
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
//添加引用
loadHeadersFromResource(R.xml.p_header,target);
}
@Override
protected boolean isValidFragment(String fragmentName) {
return true;
}
这样运行后,与上一个显示不同的是先显示p_header文件中的内容。
除了上面用到控件,还有EditTextPreference、MultiSelectListPreference、SwitchPreference等。EditTextPreference记录一段文本信息。MultiSelectListPreference多选的列表。SwitchPreference开关。
如果没有设置监听事件,你会发现点击改变控件的状态会被记录,如果设置了监听事件,就需要添加代码来完成状态的改变和记录。
如果想要实现点击某一首选项,进入另一个设置页面,请使用PreferenceScreen。
//可以引用PreferenceFragment,也可以在其内部添加
//android:layout属性能够引用一个自定义的layout
<PreferenceScreen
android:fragment="cn.xd.android8.pre.PreferenceF"
android:layout="@layout/item_test"
android:summary="PreferenceScreen"
android:title="PreferenceScreen">
</PreferenceScreen>
<PreferenceScreen
android:summary="PreferenceScreen"
android:title="PreferenceScreen">
<CheckBoxPreference
android:key="PREF_CHECK_BOX3"
android:summary="test"
android:title="CheckBoxPreference" />
</PreferenceScreen>
设置一个可点击又没有状态类似TextView控件,要使用PreferenceScreen且设置setOnPreferenceClickListener事件。
<PreferenceScreen
android:key="PREF_PreferenceScreen"
android:summary="PreferenceScreen"
android:title="充当点击的TextView">
</PreferenceScreen>
//获取控件实例,设置事件。CheckBoxPreference这类控件要设置setOnPreferenceChangeListener()事件。
public void onCreate(@Nullable Bundle savedInstanceState) {
........
PreferenceScreen PREF_PreferenceScreen=(PreferenceScreen)
findPreference("PREF_PreferenceScreen");
PREF_PreferenceScreen.setOnPreferenceClickListener(.........);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。