PreferenceActivity和PreferenceFragment实现设置界面

article/2025/11/6 2:23:12

在进行Android开发的过程中,有时需要实现一个设置界面,就像下面的系统的显示设置。这样的界面自己实现起来略显繁琐,好在Android中已经实现了这样的设置界面,那就是PreferenceActivity。并且PreferenceActivity还有一个莫大的好处,配置信息会自动使用SharedPreferences进行保存,无需我们自己实现。

PreferenceActivityPreferenceFragment结合使用,其中PreferenceActivity只是负责加载选项设置列表的布局文件。

1、现在res目录下新建xml目录,建立preference_home.xml文件

<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"><headerandroid:fragment="com.sunny.handlertest.MyPreferenceActivity$Prefs1Fragment"android:icon="@mipmap/ic_launcher"android:summary="设置第一个参数"android:title="设置1" /><headerandroid:fragment="com.sunny.handlertest.MyPreferenceActivity$Pref2Fragment"android:icon="@mipmap/ic_launcher"android:summary="设置第二个参数"android:title="设置2" /><headerandroid:icon="@mipmap/ic_launcher"android:summary="view baidu website"android:title="baidu"><intentandroid:action="android.intent.action.VIEW"android:data="https://m.baidu.com/" /></header></preference-headers>

每一项header设置点击后的fragment路径,标题,图标等。

并且可以加入intent,如第三个header,点击以后会打开百度的网站。

 

2、MyPreferenceActivity并继承PreferenceActivity

public class MyPreferenceActivity extends PreferenceActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (hasHeaders()) {Button button = new Button(this);button.setText("Exit");setListFooter(button);}}@Overrideprotected boolean isValidFragment(String fragmentName) {System.out.println(fragmentName);return true;}@Overridepublic void onBuildHeaders(List<Header> target) {loadHeadersFromResource(R.xml.preference_home, target);}public static class Prefs1Fragment extends PreferenceFragment {}public static class Pref2Fragment extends PreferenceFragment {}}  

onCreate中,我们可以利用setListFooter()给界面设置一个底部按钮之类的东西。
要想加载配置文件,需要重写onBuildHeaders()方法,并使用loadHeadersFromResource(R.xml.preference_home, target)来加载我们的配置文件。
需要注意的是,在Android 4.4及以上的的版本中,还要实现isValidFragment()方法,否则会有运行时错误,这个回调函数,会传递给我们fragment类的路径,我们要判断是否是有效路径,如果是,就返回true。在这里为了简单,直接返回true


3、创建preference_frag1.xml

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategory android:title="设置组1"><EditTextPreferenceandroid:dialogTitle="输入您的名字"android:key="name"android:singleLine="true"android:summary="设置您的姓名"android:title="姓名" /><ListPreferenceandroid:dialogTitle="选择性别"android:entries="@array/sex_name"android:entryValues="@array/sex_value"android:key="sex"android:summary="选择您的性别"android:title="性别" /></PreferenceCategory><PreferenceCategory android:title="设置组2"><CheckBoxPreferenceandroid:defaultValue="true"android:key="isOk"android:summaryOff="关闭"android:summaryOn="打开"android:title="推送" /><SwitchPreferenceandroid:defaultValue="false"android:key="autoRun"android:summaryOff="关"android:summaryOn="开"android:title="自启动" /></PreferenceCategory></PreferenceScreen>

需要注意如下几点,每一项要设置一个key,这是每一个设置的键,在代码中,可以通过这个键找到对应的PreferenceListPreference要配置entriesentryValues这两个属性,是数组类型,分别代表显示出来的选项和存储的值


string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="sex_name"><item>男</item><item>女</item></string-array><string-array name="sex_value"><item>1</item><item>0</item></string-array>
</resources>

PreferenceCategory用于设置分组;EditTextPreference是含有EditText的对话框;ListPreference是含有单选列表的对话框;CheckBoxPreference是单选项;SwitchPreference是开关。


我在在Prefs1FragmentonCreate方法中使用addPreferencesFromResource(R.xml.preference_frag1)就可以载入我们的配置文件啦。通过findPreference()方法,还可以找到key对应的配置

public static class Prefs1Fragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.preference_frag1);String name = ((EditTextPreference) findPreference("name")).getText();Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT).show();}}

展示效果:

 

小小demo,更加熟练地使用PreferenceFragment,弄了一早上!

参考地址:https://www.jianshu.com/p/6b8999ecd47b


http://chatgpt.dhexx.cn/article/7yQNrxRc.shtml

相关文章

PreferenceFragment设置界面的编写

效果图&#xff1a; 布局文件&#xff1a; <PreferenceScreenxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"><PreferenceCategoryandroid:title"string/basic_setting…

Android PreferenceFragment

PreferenceFragment用来显示首选项的设置&#xff0c;效果图如下&#xff1a; 主布局文件&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_widt…

PreferenceFragment使用

PreferenceFragment 在Android3.0之前&#xff0c;设置界面使用PreferenceActivity&#xff0c;在Android3.0之后&#xff0c;官方推荐使用PreferenceFragment&#xff0c;对应于碎片化技术。 使用 新建Fragment 新建GeneralPreferenceFragment 继承PreferenceFragment&…

Android设置页面之PreferenceFragment的简单使用示例

1.PreferenceFragment介绍 a.PreferenceFragment实际为Fragment的一个子类 b.创建一个PreferenceFragment需要绑定一个xml来显示视图 c.绑定后没就可以当作普通Fragment使用&#xff0c;只是每new一个实例就会创建一个SharePreference,把之前绑定的xml中的值写入保存&#x…

Personal preference

Personal preference 相关文章Algorithm&#xff1a;Algorithm的进阶之路 目录 程序猿成长之路 Personal 历史问题记录 程序猿成长之路 Personal 1、C:\Users\99386\AppData\Local\kingsoft\WPS Cloud Files\userdata\qing\filecache\jazve的云文档\knowledge 历史问题记录…

PreferenceFragment详解

在上篇文章中我们讲述了Android 5.1 Settings的源码解析Android 5.1 Settings模块源码分析_Flying snow-CSDN博客&#xff0c; 其中在介绍到Android的Sub Setting时&#xff0c;我们说到基本上都是使用的PreferenceFragment技术&#xff0c;今天我们就来了解一下关于Preferenc…

Android进阶——Preference详解之Preference系的基本应用和管理(二)

引言 前面一篇文章Android进阶——Preference详解之初识Preference及Preference系&#xff08;一&#xff09;简单描述下了Preference的家族构成和基本知识&#xff0c;相信对于Preference早已不会陌生&#xff0c;肯定也跃跃欲试了吧&#xff0c;这篇文章就给大家总结下Prefe…

Android自定义PreferenceScreen的Layout布局,并获取控件

先说一下需求&#xff0c;要在<PreferenceScreen>里添加一个自定义的Layout&#xff0c;实现如下效果&#xff1a; 操作步骤&#xff1a; 1、在res/layout目录创建一个xml文件&#xff0c;名为my_preference_layout.xml&#xff0c;代码如下&#xff1a; <?xml ver…

PreferenceScreen的使用(非常有用)

在res下建个xml文件夹,建立2个xml文件: preferencescreentest_one.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:key="using_categor…

使用PreferenceActivity和PreferenceScreen构建应用的设置

对于每个应用程序来说&#xff0c;都要有一些属于用户自己的设置&#xff0c;满足不同需求。当我们点击menu时&#xff0c;如下&#xff1a; 点击settings时&#xff0c;出现&#xff1a; 那么这样的效果是怎么实现的呢&#xff1f;我只是来个简单介绍&#xff0c;给自己做备忘…

PreferenceScreen

对于每个应用程序来说&#xff0c;都要有一些属于用户自己的设置&#xff0c;满足不同需求。当我们点击menu时&#xff0c;如下&#xff1a; 点击settings时&#xff0c;出现&#xff1a; 那么这样的效果是怎么实现的呢&#xff1f;我只是来个简单介绍&#xff0c;给自己做备忘…

PreferenceFragment的使用

文章目录 PreferenceFragment简介PreferenceFragment使用PreferenceFragment 扩展 PreferenceFragment简介 在我们写一个项目的时候&#xff0c;基本都有选项设置界面&#xff0c;这类设置界面的原理基本都是本地的一些个性化设置&#xff0c;通过读取本地设置来改变某些差异显…

Android中Preference的使用以及监听事件分析

转载请注明出处: http://blog.csdn.net/qinjuning 在Android系统源码中&#xff0c;绝大多数应用程序的UI布局采用了Preference的布局结构&#xff0c;而不是我们平时在模拟器中构建应用程序时使用的View布局结构&#xff0c;例如&#xff0c;Setting模块中布局。当然&#xf…

screentogif 录屏

screentogif的由来 screentogif于2013年诞生&#xff0c;主要的开发者是巴西帅哥Nicke Manarin。 最初的目的只是为了学习和提供一款软件供开发者个人使用。 在2016重新启动项目&#xff0c;使得screentogif变得更加实用。 screentogif的安装 进入官网下载软件安装包。 s…

android PreferenceScreen使用笔记

preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><Preference android:title="基本信息"android:layout="@layout/tex…

PreferenceScreen 的使用

java代码&#xff1a; public class Main3Activity extends PreferenceActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main3); //加载布局文件&#xff0c;相当于…

PreferenceScreen的应用

PreferenceScreen preference是偏好&#xff0c;首选的意思&#xff0c;PreferenceScreen个人翻译成 “偏好显示”&#xff0c;明白这个意思就好&#xff0c;就是说根据特点灵活的定义显示内容风格&#xff0c;一个屏幕可以包含多个风格&#xff0c;像系统自带的声音设置界面。…

PreferenceScreen 中如何自定义SwitchPreferenceCompat的布局

PreferenceScreen 中如何自定义SwitchPreferenceCompat的布局 Android Preference 使用请看这篇 Android Preference使用 系统设置的代码&#xff1a; public class SetActivity extends AppCompatActivity { Override protected void onCreate(Bundle savedInstanceSta…

Preference的使用(2) --- PreferenceCategory PreferenceScreen

上一节有讲到Preference的基本使用跟API的介绍 &#xff0c;没有看的话请先阅读 Preference的使用&#xff08;1&#xff09; 现在介绍其子类PreferenceCategory 跟 PreferenceScreen&#xff0c;现在看下继承关系 如上图&#xff0c;他们都是继承自PreferenceGroup的先看一…

preferenceActivity和preferencescreen用法

1. 首先生成一个preferencescreen的xml文件..看代码: <?xml version"1.0" encoding"utf-8"?><PreferenceScreen xmlns:android"http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key"chec…