Android开发之 Preference首选项

article/2025/11/4 22:03:49

  首选项最常使用的地方是系统的设置列表或应用程序的设置页。本示例在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>
<?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>

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

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

   创建Activity,在布局文件中引用PreferenceFragment。

    <fragmentandroid:id="@+id/fragment_pf"//通过name引用PreferenceFragmentandroid:name="cn.xd.android8.pre.PreferenceF"android:layout_width="match_parent"android:layout_height="match_parent" />

   运行效果如下:


这里写图片描述

  下面介绍另一种使用首选项的方法,创建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>

  创建类并继承PreferenceActivity,重写onBuildHeaders()、isValidFragment()方法。

    @Overridepublic void onBuildHeaders(List<Header> target) {super.onBuildHeaders(target);//添加引用loadHeadersFromResource(R.xml.p_header,target);}@Overrideprotected boolean isValidFragment(String fragmentName) {return true;}

  这样运行后,与上一个显示不同的是先显示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>

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

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

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

相关文章

Android国际化后英文显示自动大写解决办法

做国际化的时候&#xff0c;发现一个问题&#xff0c;在value-en的string.xml文件中设置的英文明明是小写字母&#xff0c;但是Button的显示却变成了全部大写&#xff0c;比如设置的 <string name"confirm">confirm</string> <string name"canc…

了解Android中的Preference结构的设计与实现

本文不会涉及这些Preference的使用方式&#xff0c;比如如何定义XML文件、如何使用PreferenceActivity和PreferenceFragment加载设置&#xff0c;这些都可以在Android Developer的官方指南里了解到详情。本文主要通过分析源代码来分享Preference的设计和实现方式&#xff0c;让…

Android设置界面_Preference

AndroidPreference 基本上每个应用都有一个设置(首选项)界面, Google其实提供了默认的设置界面实现方式. 介绍下 Preference该类拥有多个直接或间接的子类, 这些子类可以组成不同内容的首选项界面. 和一般界面不同的 关键类: Preference 普通 RingtonePreference 铃声Chec…

Android Preference 卡片圆角风格定制

效果图 实现步骤 在网上查找这块的资料&#xff0c;发现并未找到相关的&#xff0c;大多都是通过修改 Preference style 来设置背景色什么的&#xff0c;和我们预想的 效果不太一样&#xff0c;那就去看看 Preference 源码吧&#xff0c;说不定能有什么收获。 先看下 Prefer…

Preference,PreferenceCategory,PreferenceList,PreferenceCheckBox等控件的简单讲解

有人会纳闷&#xff0c;为什么不使用普通的控件去写settings页面&#xff0c;非得要preference来写&#xff0c;这是有原因的&#xff0c;Preference可以自动保存上一次操作的值&#xff0c;并且preference会自动将自己的值保存在shared Preference里面&#xff0c;而preferenc…

Android中preference标签的使用

现在做公司任务的时候&#xff0c;经常会要去读Settings的源码&#xff0c;然后发现在xml文件中几乎全是用的preferenceScreen和preferenceCategory标签&#xff0c;很少有用布局和控件的&#xff0c;然后我就自己上网看了很多有关的资料&#xff0c;在此总结下。 首先在res目录…

Android 之Preference控件

简述 Preference是Android的控件之一&#xff0c;相对来说我们用的比较少&#xff0c;但在系统应用的Settings设置应用模块中大部分由Preference控件组成。 主要成分 Preference主要角色是子控件&#xff0c;PreferenceCategory相当于LinearLayout和Relative layout&#xff0c…

使用jxls导出报错:Connot load XLS transformer please make sure a Transformer implementation is in classpath

使用jxls导出是报错&#xff1a; java.lang.IllegalStateException: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath 仔细排查&#xff0c;是因为批注的问题&#xff1a; 是因为批注放到第二个单元格去了&#xff0c;扫描不到区…

XLSTransformer生成excel文件案例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;可以到http://www.findjar.com/index.x下载 ExcelUtil类源码&#xff1a; package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.u…

XLSTransformer 导出Excel数据

先上代码 java code: <pre name"code" class"java">package cn.export.util; import java.io.FileInputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Serv…

Java XLSTransformer生成excel文件

把页面的数据导出excel 数据 然后进入 struts2 action <action name"generateExcel" class"com.xx.emidas.activity.activity.ajax.XLSTransformerGenerateExcelAction"></action> package com.xx.emidas.activity.activity.ajax;import co…

XLSTransformer生成excel文件简单示例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;可以到http://www.findjar.com/index.x下载 ExcelUtil类源码&#xff1a; [java] view plain copy package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.uti…

XLSTransformer生成excel文件简单演示样例

项目结构图&#xff1a; 项目中所用到的jar&#xff0c;能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码&#xff1a; package util;import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map;i…

XLSTransformer+模板 导出 Excel

利用excel模板来导出excel文件&#xff0c; 十分方便 RequestMapping(value "/download/vin", method RequestMethod.GET)ResponseBodypublic ResBody exportExcel(HttpServletRequest request) {String path request.getSession().getServletContext().getRealPa…

XLSTransformer.transformWorkbook导出excel不能将列导出完整问题

生产就项目用到jxls加poi导出excel文件 //模拟数据 List data new ArrayList<>(); Map<String,Object> excelMap new HashMap<>();excelMap.put("ro", data ); //项目用到的导出代码 String fileName SystemConst.WEB_ROOT_PATH File.separat…

Jxls异常 Cannot load XLS transformer. Please make sure a Transformer impleme

错误&#xff1a;Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath 原因&#xff1a; 这是 jxls 的版本升级2.4后需要额外导入其他依赖 还要在plugins中加上以下插件 <plugin><groupId>org.apache.maven.plugins</…

Excel之XLSTransformer

前言 利用该工具类可以向excel模板中写入数据&#xff0c;而不用写过多代码画excel 引入依赖 java <dependency> <groupId>net.sf.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.3</version> </dependency>…

使用XLSTransformer生成报表的步骤和流程

使用XLSTransformer生成XLS报表的步骤和流程&#xff1a; 需要引入的jar包&#xff1a; jxls-core-0.9.7.jar jxls-reader-0.9.7.jar poi-3.6.jar commons-jexl-1.1.jar commons-digester-2.0.jar commons-beanutil-core-1.8.3.jar commons-collection.jar 示例代码…

利用模板导出文件(一)之XLSTransformer导出excel文件

由于现在好多公司都在实行办公无纸化操作&#xff0c;所以一般都是使用excel以及word来办公&#xff0c;本文是公司项目中使用excel文件模板生成对应的文件&#xff1a; 首先&#xff0c;需要导入一下几个包&#xff1a; 接下来就是具体的代码&#xff1a; import java.io.Fil…

关于使用XLSTransformer.transformXLS导出Excel表格中遇到的问题

1. 需求&#xff1a;最近拿到的一个任务&#xff0c;是将订单列表导出&#xff0c;按照订单列表导出&#xff08;包括筛选条件&#xff09;。 背景&#xff1a;由于原本的订单列表查询代码太过繁重&#xff0c;里面夹杂的逻辑较多&#xff0c;再有一个是自己想尽快的熟悉公司…