当前位置:   article > 正文

Android开发之 Preference首选项_preferencecategory

preferencecategory

  首选项最常使用的地方是系统的设置列表或应用程序的设置页。本示例在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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
<?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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

  创建一个类并继承PreferenceFragment,重写onCreate()方法。

public class PreferenceF extends PreferenceFragment{
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //添加上面的xml文件
        addPreferencesFromResource(R.xml.perference);

    }
}   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

   创建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" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

   运行效果如下:


这里写图片描述

  下面介绍另一种使用首选项的方法,创建xml文件,添加header,设置引用的fragment。

//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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  创建类并继承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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

  这样运行后,与上一个显示不同的是先显示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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

  设置一个可点击又没有状态类似TextView控件,要使用PreferenceScreen且设置setOnPreferenceClickListener事件。

    <PreferenceScreen
        android:key="PREF_PreferenceScreen"
        android:summary="PreferenceScreen"
        android:title="充当点击的TextView">
    </PreferenceScreen>
  • 1
  • 2
  • 3
  • 4
  • 5
//获取控件实例,设置事件。CheckBoxPreference这类控件要设置setOnPreferenceChangeListener()事件。
public void onCreate(@Nullable Bundle savedInstanceState) {
        ........
        PreferenceScreen  PREF_PreferenceScreen=(PreferenceScreen)
                                 findPreference("PREF_PreferenceScreen");
        PREF_PreferenceScreen.setOnPreferenceClickListener(.........);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/152986
推荐阅读
相关标签
  

闽ICP备14008679号