PreferenceScreen 的使用

java代码:

public class Main3Activity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main3);
//加载布局文件,相当于setContentView();
        addPreferencesFromResource(R.xml.dashboard_categories);

    }
}

xml 布局文件,CheckBoxPreference 就相当于CheckBox 加 SharedPreference 的封装,只要选中之后,就会在shared_prefs文件加下生成对应的xml 文件,key就是xml文件中定义的key:android:key=“checkbox”,如果里面再套一个PreferenceScreen节点,点击进去就进入PreferenceScreen 这个节点所包含的xml文件。
key 是生成xml,文件所对应的key
title是对应的标题
summary是对应的小标题
icon 是对应的图标

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <CheckBoxPreference
        android:key="checkbox"
        android:title="CheckBoxPreference"
        android:summary="check it box"
        />
    <RingtonePreference
        android:key="ring"
        android:title="ringtone"
        android:summary="check a ringtone"
        />
    <PreferenceScreen
        android:key="screen"
        android:title="PreferenceScreen"
        android:summary="screen it"
        >
        <SwitchPreference
            android:key="switch"
            android:title="switchPreference"
            android:summary="switch it"
            />
        <EditTextPreference
            android:key="edit"
            android:title="editPreference"
            android:summary="OK"
            />
    </PreferenceScreen>
</PreferenceScreen>

ListPreference 的用法,如下图所示,点击Options 弹出对话框,total 是名称,当选择check时,此时在xml文件中保存的值是
1,所以entries 属性,所对应的是单选框的标题,entryValues属性,所对应的是在xml文件中保存的值
在这里插入图片描述

   <ListPreference
            android:key="list"
            android:title="Options"
            android:entries="@array/entry_list"
            android:entryValues="@array/values_list"
            android:dialogTitle="list dialogtitle"
            android:defaultValue="1"
            />
  // value 下的string.xml 
<resources>
    <string name="app_name">My Application</string>
    <string-array name="entry_list">
        <item>total</item>
        <item>check</item>
        <item>airplace</item>
    </string-array>
    <string-array name="values_list">
        <item>0</item>
        <item>1</item>
        <item>2</item>
    </string-array>
</resources>

在这里插入图片描述
MultiSelectListPreference
它的实现和ListPreference相似,不同的是还可以不选择或者多个选择,代码是和ListPreference一样的,在xml 保存的数据是set集合:

16
2

运行效果如下图:
在这里插入图片描述
onPreferenceTreeClick,这个方法是点击时候的回调,然后根据不同的key,进行区分,然后处理事件

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main3);
        addPreferencesFromResource(R.xml.dashboard_categories);
        checkbox = (CheckBoxPreference)findPreference("checkbox");
        hahah = findPreference("ltt");

    }
    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if(preference.getKey().equals("checkbox")){
            Log.i("lgj", "checkbox");
        }
        if(preference.getKey().equals("ltt")){
            Log.i("lgj", "ltt");
        }
        return true;
    }

除了上面这个监听的方法之外,还有两个重要的接口:
OnPreferenceChangeListener
当Preference的元素值发送改变时,触发该事件,记住只有元素值改变才会触发这个值,返回值为true 表示将新值写入sharedPreference文件中
false 则不将新值写入sharedPreference文件

那么这三个点击事件在一起是什么用的呢?它的规则如下:

点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值(这个下面会讲解这个值是如何保存的),然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。然后onPreferenceClick会比onPreferenceTreeClick()方法先调用,如果onPreferenceClick方法返回true,那就不会再调用onPreferenceTreeClick()方法,如果onPreferenceClick()返回false就会继续调用onPreferenceTreeClick()方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PreferenceScreen 是 Android 中的一个 UI 组件,它提供了一种结构化的方式来呈现应用程序的设置选项。它是 Preference 类的子类,可以包含多个 Preference 类的实例,例如 CheckBoxPreference、EditTextPreference 等。当用户点击 PreferenceScreen 中的某个选项时,会进入一个新的 PreferenceScreen 或者打开一个 Dialog,让用户进行相应的设置。 在实现 PreferenceScreen 的时候,需要在布局文件中使用 PreferenceScreen 标签,如下所示: ```xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 包含多个 Preference 类的实例 --> </PreferenceScreen> ``` 在 java 代码中,可以使用 PreferenceFragment 或者 PreferenceActivity 来管理 PreferenceScreen。 PreferenceFragment 是一个 Fragment,它可以被添加到 Activity 中。在 PreferenceFragment 中,可以通过调用 addPreferencesFromResource(int) 方法来加载一个 PreferenceScreen 布局文件。例如: ```java public class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } ``` PreferenceActivity 是一个 Activity,它继承自 ListActivity。在 PreferenceActivity 中,可以通过调用 addPreferencesFromResource(int) 方法来加载一个 PreferenceScreen 布局文件。例如: ```java public class MyPreferenceActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } ``` 需要注意的是,从 Android 11 开始,推荐使用 PreferenceFragmentCompat 替代 PreferenceFragment。PreferenceFragmentCompat 是一个兼容库,可以在 Android 4.0 及以上版本中使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值