Android PreferenceActivity使用

article/2025/10/29 22:36:48

PreferenceActivity继承了ListActivity,定义Activity继承PreferenceActivity。在res目录下新建一个xml文件夹,接着在这个文件夹下新建一个取名为preferences.xml的File文件,xml中可以使用的标签(Tag)可以分为两类,一类是管理布局的显示,如PreferenceScreen;另一类是内容设置标签,如CheckBoxPreference。把java文件中的setContentView(R.layout.main)改为addPreferencesFromResource(R.xml.preferences);包含在PreferenceScreen标签里的内容都将以一个完整的页面显示,PreferenceScreen可以嵌套。

<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="Settings"><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:title="Emotions"android:summary="settings about emotions"><CheckBoxPreference  android:title="Love me?" android:summaryOn="Yes,I love you!"android:summaryOff="No,I am sorry."android:defaultValue="true"android:key="CheckBoxPreference"></CheckBoxPreference><CheckBoxPreference android:title="Hate me?" android:summaryOn="Yes,I hate you!"android:summaryOff="No,you are a good person."android:defaultValue="false"></CheckBoxPreference><SwitchPreference android:summaryOn="summaryOn"android:summaryOff="summaryOff"android:title="SwitchPreference"android:key="SwitchPreference"/>	</PreferenceScreen><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:title="Relations"android:summary="settings about relations"><CheckBoxPreference android:title="Family?" android:summaryOn="Yes,we are family!"android:summaryOff="No,I am sorry."android:defaultValue="true"></CheckBoxPreference><CheckBoxPreference android:title="Friends?" android:summaryOn="Yes,we are friends!"android:summaryOff="No,I am sorry."android:defaultValue="false"></CheckBoxPreference>		</PreferenceScreen>	
</PreferenceScreen>

由于布局中有三个PreferenceScreen,因此将显示三个页面。和管理布局显示相关的除了PreferenceScreen外,还有一个常用的为PreferenceCategory,如果将以上布局中间那两个PreferenceScreen改为PreferenceCategory,则只显示一个页面,PreferenceCategory只是把包含的内容归为同一类,但只是显示在一个页面中。


当PreferenceActivity中的内容改变时,Android系统会自动进行保存和持久化维护,我们只需要在要用的设置界面中数据的地方进行读取就可以了。同时Android还提供了OnPreferenceClickListener和OnPreferenceChangeListener两个与Preference相关的监听接口,当PreferenceActivity中的某一个Preference进行了点击或者改变的操作时,都会回调接口中的函数,这样可以第一个时间向其他Activity等通知系统设置进行了改变。

public class MainActivity extends PreferenceActivity implements OnPreferenceChangeListener,   OnPreferenceClickListener{private CheckBoxPreference cBoxPreference = null;private SwitchPreference switchPreference = null;private final static String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);//从xml文件中添加Preference项  addPreferencesFromResource(R.xml.preferences);//findPreference函数通过key可以找到对应的设置项cBoxPreference = (CheckBoxPreference)findPreference("CheckBoxPreference");switchPreference = (SwitchPreference)findPreference("SwitchPreference");cBoxPreference.setOnPreferenceChangeListener(this);  switchPreference.setOnPreferenceClickListener(this);cBoxPreference.setOnPreferenceChangeListener(this);  switchPreference.setOnPreferenceClickListener(this);}/* * (non-Javadoc)* @param preference* @param newValue* @return * @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object) */@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {// TODO Auto-generated method stub//判断是哪个Preference改变了  if(preference.getKey().equals("CheckBoxPreference")){  Toast.makeText(this, "CheckBoxPreference onPreferenceChange", Toast.LENGTH_SHORT).show();//读取设置信息SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  Boolean cb = settings.getBoolean("CheckBoxPreference", false);  Boolean sw = settings.getBoolean("SwitchPreference", false);  Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();}else if(preference.getKey().equals("SwitchPreference")){ Toast.makeText(this, "SwitchPreference onPreferenceChange", Toast.LENGTH_SHORT).show();//读取设置信息SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  Boolean cb = settings.getBoolean("CheckBoxPreference", false);  Boolean sw = settings.getBoolean("SwitchPreference", false);  Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();}else{  //如果返回false表示不允许被改变  return false;  }  //返回true表示允许改变  return true;  }/* * (non-Javadoc)* @param preference* @return * @see android.preference.Preference.OnPreferenceClickListener#onPreferenceClick(android.preference.Preference) */@Overridepublic boolean onPreferenceClick(Preference preference) {// TODO Auto-generated method stub//判断是哪个Preference改变了  if(preference.getKey().equals("CheckBoxPreference")){  Toast.makeText(this, "CheckBoxPreference onPreferenceChange", Toast.LENGTH_SHORT).show();//读取设置信息SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  Boolean cb = settings.getBoolean("CheckBoxPreference", false);  Boolean sw = settings.getBoolean("SwitchPreference", false);  Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();}else if(preference.getKey().equals("SwitchPreference")){ Toast.makeText(this, "SwitchPreference onPreferenceChange", Toast.LENGTH_SHORT).show();//读取设置信息SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  Boolean cb = settings.getBoolean("CheckBoxPreference", false);  Boolean sw = settings.getBoolean("SwitchPreference", false);  Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();}else{  //如果返回false表示不允许被改变  return false;  }  //返回true表示允许改变  return true;  }
}
一个Preference拥有的属性:
1. Key为这个Preference的ID,设置了才可以在代码中引用
2. Title是显示的标题
3. Summary是显示在标题下的文字介绍
4. Dependency中填写一个CheckBoxPreference的Key,这样就会在填写的那个CheckBoxPreference勾选时当前这个Preference才可用Default Value为初始值

内容设置标签包括:
1.对话框显示的DialogPreference
2.输入文本的EditTextPreference
3.列表方式显示供选择的ListPreference
4.设置铃声的RingtonePreference
5.开关切换SwitchPreference
6.多选列表显示MultiSelectListPreference

在应用程序安装目录下,存在一个以应用程序包名为前缀的xml文件保存了所有设置项值:




http://chatgpt.dhexx.cn/article/YKiTZHUc.shtml

相关文章

PreferenceActivity定制

android很多设置界面都会使用PreferenceActivity来实现&#xff0c;但那个界面比较丑陋&#xff0c;显示开发总是满足不了要求。 可以自己实现一个&#xff0c;但是那样又会使Activity中的逻辑代码和xml布局文件过于复杂&#xff0c;远远不及PreferenceActivity来的方便快捷。…

PreferenceActivity、PreferenceFragment使用

目录 目录前言PreferenceActivity preferences_scenario_1xmlPreference Activity演示 PreferenceFragment xml布局文件Preference FragmentPreference Activity管理Fragment 适配 前言 转来转去又回到了Android&#xff0c;闲话少说&#xff0c;这里是参考Android原生的Setti…

Android PreferenceActivity的介绍

转载&#xff1a;http://blog.chinaunix.net/uid-24666775-id-351136.html 在Android中的APIdemos是中经常遇到过继承于PreferenceActivity这个类&#xff0c;紧接着就是addPreferencesFromResource(R.xml.*******);&#xff08;附&#xff1a;这个******就是一个XML文件&#…

Android开发--详解SharedPreference/PreferenceActivity

我们经常看到应用程序的设置页面&#xff0c;一般用到设置页面时&#xff0c;我们会继承自PreferenceActivity&#xff0c;它实现了SharedPreference&#xff0c;并生成相应的XML文件自动保存用户的设置&#xff0c;在设置页面中&#xff0c;每一个列表项都是一个Preference&am…

Android之PreferenceActivity 详解

看到很多书中都没有对PreferenceActivity做介绍&#xff0c;而我正好又在项目中用到&#xff0c;所以就把自己的使用的在这总结一下&#xff0c;也方便日后查找。 PerferenceActivity是什么&#xff0c;看下面的截图&#xff1a; Android系统截图&#xff08;左&#xff09; …

android的PreferenceActivity

前言 这段时间在研究android平台上的开源项目——StandupTimer&#xff0c;这是由jwood所设计的一个较为简单android应用&#xff0c;用于控制会议时间&#xff0c;类似秒表倒计时。 PreferenceActivity PreferenceActivity是android提供的对系统信息和配置进行自动保存的Activ…

用StopWatch统计耗时,比System.currentTimeMillis好用

平时项目中统计耗时都用System.currentTimeMillis&#xff0c;最近看到一个spring-StopWatch统计耗时&#xff0c;其用法简单明了&#xff0c;比传统统计耗时方法好用。 StopWatch 的内部是通过 System.nanoTime() 来计时的&#xff0c;本质和 System.currentTimeMillis() 差别…

并发慎用——System.currentTimeMillis()

好记忆不如烂笔头&#xff0c;能记下点东西&#xff0c;就记下点&#xff0c;有时间拿出来看看&#xff0c;也会发觉不一样的感受. System.currentTimeMillis()是极其常用的基础Java API&#xff0c;广泛地用来获取时间戳或测量代码执行时长等&#xff0c;在我们的印象中应该快…

System.currentTimeMillis()的性能问题以及解决方法

System.currentTimeMillis()是极其常用的基础Java API&#xff0c;广泛地用来获取时间戳或测量代码执行时长等&#xff0c;在我们的印象中应该快如闪电。但实际上在并发调用或者特别频繁调用它的情况下&#xff08;比如一个业务繁忙的接口&#xff0c;或者吞吐量大的需要取得时…

统计代码执行时间时,System.currentTimeMillis()与System.nanoTime()哪个更适合?

目录 1.nanoTime是什么&#xff1f; 2.currentTimeMillis是什么&#xff1f; 3.nanoTime与currentTimeMillis在JDK中阐述 4.nanoTime与currentTimeMillis使用对比 5.深究从OpenJDK源代码、glibc&#xff0c;一直到Linux内核 6.总结 1.nanoTime是什么&#xff1f; ns&…

System.currentTimeMillis的性能如何

一、背景 撸代码时发现System.currentTimeMillis的调用都被封装成了cache类型&#xff0c;代码如下: 那么System.currentTimeMillis真的有这么这么差吗&#xff0c;如果差的话又是什么原因造成的&#xff1f;什么情况下可以直接调用原生方法&#xff0c;什么情况下需要使用缓存…

别再用 System.currentTimeMillis 统计耗时了,太 Low,试试 Spring Boot 源码在用的 StopWatch吧,够优雅

大家好&#xff0c;我是二哥呀&#xff01; 昨天&#xff0c;一位球友问我能不能给他解释一下 SpringBootApplication 注解是什么意思&#xff0c;还有 Spring Boot 的运行原理&#xff0c;于是我就带着他扒拉了一下这个注解的源码&#xff0c;还有 SpringApplication 类的 ru…

System.currentTimeMillis的性能,真有如此不堪吗?

# 疑惑&#xff0c;System.currentTimeMillis真有性能问题&#xff1f; 最近我在研究一款中间件的源代码时&#xff0c;发现它获取当前时间不是通过System.currentTimeMillis&#xff0c;而是通过自定义的System.currentTimeMillis的缓存类&#xff08;见下方&#xff09;&…

疑惑,System.currentTimeMillis真有性能问题?

点击关注公众号&#xff0c;Java干货及时送达 System.currentTimeMillis的性能真有如此不堪吗&#xff1f; 最近我在研究一款中间件的源代码时&#xff0c;发现它获取当前时间不是通过System.currentTimeMillis&#xff0c;而是通过自定义的System.currentTimeMillis的缓存类&a…

高并发下System.currentTimeMillis()性能问题及优化方案

文章目录 背景System.currentTimeMillis()性能测试单线程测试多线程测试 原因优化优化代码单线程测试多线程测试 参考 背景 最近在看asyncTool源码发现了System.currentTimeMillis存在卡顿问题&#xff0c;所以就详细研究了下。具体如何呢&#xff1f;我们来看看 System.curr…

currentTimeMillis()方法

currentTimeMillis()方法返回一个long类型的值&#xff0c;该值表示的是当前时间与1970年1月1日0时0分0秒之间的时间差&#xff0c;单位是毫秒&#xff0c;习惯上被称为时间戳 源码&#xff1a; 时间戳可以用来计算循环操作时所需要的时间&#xff1a; /*** 向goods表中插入…

Java获取当前时区时间LocalDateTime与System.currentTimeMillis

Java获取当前时区时间 System.currentTimeMillisLocalDateTime最终结果 全球根据纬度不同&#xff0c;划分不同的时区。对于此时此刻&#xff0c;大家同处同一个时间点&#xff0c;但是&#xff0c;每个时区的时间表示是不同的。Java可以使用 System.currentTimeMillis和 Loc…

关于Java currentTimeMillis方法简述

刚刚接触JAVA时&#xff0c;为了便于记录某个方法块的执行时间&#xff0c;通常都会在代码块的执行前和执行后各标记一个时间&#xff0c;取两个时间差。 但是初学者一般只会选择用LocalDateTime来标记&#xff0c;然后用Duration.between来做差值。当然&#xff0c;Duration可…

System.currentTimeMillis()计算方式与时间的单位转换

一、时间的单位转换 1秒1000毫秒(ms) 1毫秒1&#xff0f;1,000秒(s) 1秒1,000,000 微秒(μs) 1微秒1&#xff0f;1,000,000秒(s) 1秒1,000,000,000 纳秒(ns) 1纳秒1&#xff0f;1,000,000,000秒(s) 1秒1,000,000,000,000 皮秒(ps) 1皮秒1&#xff0f;1,000,000,000,000秒(s) …

Java currentTimeMillis()方法介绍

一、官方文档 参考自Java SE 8官方文档&#xff1a; 方法功能&#xff1a;返回从1970年1月1日午夜&#xff08;UTC&#xff09;开始到当前时间的毫秒值. 其中&#xff0c;需要特别说明的地方 1.午夜(midnight)指的时间是 0时0分0秒&#xff0c;UTC表示该时间是0时区的时间…