PreferencesActivity - Android

这篇文章记录的是Android应用中的PreferenceActivity

基本使用

1.布局文件res/xml下.根节点为PreferencesScreen. 该节点下有下面的

2.根节点类继承自PreferenceActivity

3.使用addPreferenceFromResource将xml布局资源与activity关联起来.

4.读取数据

PreferenceManager preferenceManager = getPreferenceManager();
        CheckBoxPreference checkbox = (CheckBoxPreference) preferenceManager.findPreference("checkbox");
        Log.e(TAG, "checkbox 当前的状态是 " + checkbox.isChecked());

CheckBoxPreference

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="checkbox"
        android:summary="测试checkbox"
        android:title="是否开启" />
</PreferenceScreen>

activity:

package com.example.myapplication.prefences;

import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;

import androidx.annotation.Nullable;

import com.example.myapplication.R;

public class MyPreferenceActivity extends PreferenceActivity {
    private static final String TAG = "ysd";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   addPreferencesFromResource(R.xml.preferences_activity);
        PreferenceManager preferenceManager = getPreferenceManager();
        CheckBoxPreference checkbox = (CheckBoxPreference) preferenceManager.findPreference("checkbox");
        // 获取选中状态
        Log.e(TAG, "checkbox 当前的状态是 " + checkbox.isChecked());
    }
}

执行结果:

image-20230909033718377.png

ListPreference

首先,需要在res/values 目录下,建立一个数据列表.列表的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="list_key">
        <item>蒙恬</item>
        <item>蒙毅</item>
        <item>苻坚</item>
    </string-array>
    <string-array name="list_value">
        <item>1号</item>
        <item>2号</item>
        <item>3号</item>
    </string-array>
</resources>

布局xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <ListPreference
        android:key="list"
        android:summary="选择人"
        android:title="大秦武将"
        android:entries="@array/list_key"
        android:entryValues="@array/list_value"
        />
</PreferenceScreen>

在JAVA中获取数据

package com.example.myapplication.prefences;

import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;

import androidx.annotation.Nullable;

import com.example.myapplication.R;

public class MyPreferenceActivity extends PreferenceActivity {
    private static final String TAG = "ysd";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences_activity);
        PreferenceManager preferenceManager = getPreferenceManager();
        ListPreference list = (ListPreference) preferenceManager.findPreference("list");
        // 获取键值对
        Log.e(TAG, "list 当前的状态是 " + list.getEntry() + " --> " + list.getValue());
    }
}

上面的代码执行之后,会得到诸如下面的执行结果:

image-20230909034818225.png

EditTextPreference

布局XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

   <EditTextPreference
       android:key="edit"
       android:title="这是标题"
       android:summary="这是阐述"
       android:dialogTitle="弹出标题"
       android:dialogMessage="弹出消息"
       />
</PreferenceScreen>

在JAVA中获取输入文本:

package com.example.myapplication.prefences;

import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;

import androidx.annotation.Nullable;

import com.example.myapplication.R;

public class MyPreferenceActivity extends PreferenceActivity {
    private static final String TAG = "ysd";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences_activity);
        PreferenceManager preferenceManager = getPreferenceManager();
        EditTextPreference editText = (EditTextPreference) preferenceManager.findPreference("edit");
        // 获取键值对
        Log.e(TAG, "edit text保存的文本是: " + editText.getText());
    }
}

上面的代码执行完毕之后,会得到诸如下面的执行结果:

image-20230909035345793.png