Android APP:Preference使用详解和实例(附源码)

article/2025/11/4 22:12:08

 

             Android APP:Preference使用详解和实例

 

一、Preference 是Android app中重要的控件之一,Settings 模块大部分都是通过Preference 实现的,这里将学习preference 使用方法。

二、Perference 使用方法
一般在XML文件夹中创建xml文件来对Settings进行布局,布局文件中通常使用PreferenceScreen容器,PreferenceScreen包含多个 Preference控件,PreferenceCategory可以设置分类标题。

三、常用Preference控件如下:

              Preference 控件家庭          View控件家庭       控件含义                   
               Preference                         TextView            文本框                      
              CheckPreference              CheckBox           单选框                  
              EditTextPreference           EditText               输入文本框            
              ListPreference                   ListView             列表框             
              RingtonePreference          ——                    铃声
              PreferenceCategory        类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。
              PreferenceScreen            所有Preference元素的根节点

           上面控件等同Layout布局中的View,PreferenceScreen 等同Layout布局中的ViewGroup。在Android 3.0之前需要继承PreferenceActivity(此方法不是太推荐使用,已被启用),3.0之后更高版本,则需要继承Activity,使用Fragment控制布局,然后实现不同控件的处理事件。

三、Perference常用使用方法如下两种:

       1、使用XML定义Preference
       2、使用Fragment 定义Preference

四、使用XML定义Preference

        此方法有点过时,不太建议使用,但目前还可以用。让Activity继承PreferenceActivity,然后在重写onCreate方法,添加preferences.xml作为显示界面。

         其使用方法如下:

         1、在res/xml/目录中新建xml文件 例如:settingsfragment.xml


         2、继承PreferenceActivity在onCreate方法中直接调用addPreferencesFromResource(R.xml.settingsfragment);添加布局


         3、点击事件处理setOnPreferenceClickListener,内容发生改变事件处理 setOnPreferenceChangeListener

              4、执行效果图

五、使用Fragment 定义Preference

        1 、 新建一个资源文件,类型是Preference,为了方便管理我们在res资源文件夹里新建一个名为xml的文件夹,存放我们的资源文件.鼠标右键xml/new/xml resouce file,新建一个settingsfragment.xml文件  。

     2、自定义 SettingsFragment。

public class SettingsFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Load the preferences from an XML resourceaddPreferencesFromResource(R.xml.preference);}
}

      3、preference 实现,settingsfragment.xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategoryandroid:key="categoryOne"android:title="General"><Preferenceandroid:key="prefAndroid"android:title="安卓"android:summary="点一下更新内容"/><Preferenceandroid:key="prefIos"android:title="IOS"android:summary="可以作为一个设置项"/><CheckBoxPreferenceandroid:key="prefCheckBoxOne"android:title="这相当于一个CheckBox"/><CheckBoxPreferenceandroid:key="prefCheckBoxTwo"android:title="还可以设置summary"android:summaryOn="选中了"android:summaryOff="没选中"/><CheckBoxPreferenceandroid:key="TestCheckBoxTwo"android:title="testsummary" /><EditTextPreferenceandroid:key="prefEditText"android:title="这相当于一个EditText"android:summary="我是EditText的一个summary"/><ListPreferenceandroid:key="prefList"android:title="这相当于一个List表"/><Preference android:key="up_time"android:enabled="false"android:shouldDisableView="false"android:title="Up time"android:summary="hh:min:sec"android:persistent="false" /></PreferenceCategory><PreferenceCategoryandroid:key="prefCategoryTwo"android:title="Inactive" ><MultiSelectListPreferenceandroid:key="prefMultiSelect"android:title="这相当于一个MultiSelect"/><SwitchPreferenceandroid:key="prefSwitch"android:title="这相当于一个Switch"android:switchTextOn="switchTextOn选中了"android:switchTextOff="switchTextOff没选中"android:summaryOn="summaryOn选中了"android:summaryOff="summaryOff没选中"android:shadowColor="#0df10d"/><RingtonePreferenceandroid:key="prefRingtone"android:title="这相当于一个"android:summary="请选择铃声"android:icon="@mipmap/ic_launcher_round"/></PreferenceCategory>
</PreferenceScreen>

    4、Activity 中调用Fragment

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_preference);getFragmentManager().beginTransaction().replace(R.id.settingsFragment, new SettingsFragment()).commit();}}

    5、MainActivity.java代码

package com.example.preferencedemo;import android.net.wifi.WifiConfiguration;
import android.os.Handler;
import android.os.SystemClock;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.lang.ref.WeakReference;
import android.os.Message;
import android.net.wifi.WifiManager;
import android.widget.Toast;
//public class MainActivity extends PreferenceActivity {
public class MainActivity extends AppCompatActivity {public static Preference mUptime;private Handler mHandler;private static final int EVENT_UPDATE_STATS = 500;public static  class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {private CheckBoxPreference m_prefCheckBoxTwo;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Load the preferences from an XML resourceaddPreferencesFromResource(R.xml.settingsfragment);mUptime = findPreference("up_time");m_prefCheckBoxTwo=(CheckBoxPreference) findPreference("TestCheckBoxTwo");m_prefCheckBoxTwo.setOnPreferenceChangeListener(this);}@Overridepublic boolean onPreferenceClick(Preference preference) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onPreferenceChange(Preference preference, Object o) {if (preference == m_prefCheckBoxTwo){m_prefCheckBoxTwo.setSummary("checked or no:"+m_prefCheckBoxTwo.isChecked());}return true;  //保存更新后的值}}private  class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case EVENT_UPDATE_STATS:updateTimes();sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);break;}}}   @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mHandler = new MyHandler();setContentView(R.layout.activity_main);getFragmentManager().beginTransaction().replace(R.id.settingsFragment, new SettingsFragment()).commit();// addPreferencesFromResource(R.xml.settingsfragment);// mUptime = findPreference("up_time");mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);}private  void updateTimes() {long at = SystemClock.uptimeMillis() / 1000;long ut = SystemClock.elapsedRealtime() / 1000;if (ut == 0) {ut = 1;}mUptime.setSummary(convert(ut));}private String pad(int n) {if (n >= 10) {return String.valueOf(n);} else {return "0" + String.valueOf(n);}}private String convert(long t) {int s = (int)(t % 60);int m = (int)((t / 60) % 60);int h = (int)((t / 3600));return h + ":" + pad(m) + ":" + pad(s);}
}

 

       6、执行效果图。

六、源码路径

      1使用XML定义Preference源码路径。https://download.csdn.net/download/qq_37858386/12074718

      2、使用Fragment 定义Preference源码路径:https://download.csdn.net/download/qq_37858386/12074681


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

相关文章

Android开发之 Preference首选项

首选项最常使用的地方是系统的设置列表或应用程序的设置页。本示例在android 4.0上运行。    在res/xml文件下建立xml文件&#xff0c;设置需要的控件。下面的xml文件使用了PreferenceCategory 、CheckBoxPreference、ListPreference。PreferenceCategory 是一个标题栏分隔符…

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…