首页 > 其他分享 >PreferenceActivity详解

PreferenceActivity详解

时间:2023-05-01 14:01:27浏览次数:46  
标签:xml PreferenceActivity 详解 Preference key autoBack com


为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢?

根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放  其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference

所以  现在有更好的选择了 那就是本文的主角:PreferenceActivity
从名字应该可以看出 其实 Activity 与 Perference 的混合物

还是从需求说起  常见属性设定  有哪几种方式:

1. CheckBox  用于 确定/取消  某项功能    如:是否静音   对应于:CheckBoxPreference   其在Preference 有一个选项与其自动绑定 下同

2.  ListView 用于列出所有选择  如:铃声选择 列出所有声音供选择使用  对应于:ListPreference

3.  属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen  该项仅用于界面 故与Preference无关

界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了  所以 觉得还是以步骤为主

鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下
[代码 步骤]
1.  PreferenceActivity  界面比较特别 在 res/xml/setting.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="autoBack"
android:title="自动回复"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>

<PreferenceCategory android:title="SMS 助手">
<CheckBoxPreference
android:key="smsSilence"
android:title="静音"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="false"
/>
<PreferenceScreen android:title="更多选项">
<CheckBoxPreference
android:key="cb21"
android:title="功能1"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<CheckBoxPreference
android:key="cb22"
android:title="功能2"
android:summaryOn="使用"
android:summaryOff="停用"
android:defaultValue="true"
/>
<ListPreference
android:key="list1"
android:title="android forum"
android:summary="开发论坛"
android:dialogTitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
<EditTextPreference
android:key="et1"
android:title="EditTextPreference Sample"
android:summary="点击输入"
android:dialogTitle="输入设置"
android:defaultValue="Hello EditTextPreference"
/>
</PreferenceScreen>
</PreferenceCategory>

<PreferenceCategory android:title="其他选项">
<RingtonePreference
android:key="rt1"
android:title="RingtonePreference Sample"
android:summary="选择铃声"
/>
</PreferenceCategory>
</PreferenceScreen>



2. 导入setting.xml


addPreferencesFromResource(R.xml.settings);



emulator 运行截图:




点开"更多选项"




具体 请大家自己尝试之



3. 其实 关于PreferenceActivity 问题 基本结束了 但是 初次使用 会碰到一些坎坷 现一一讨论



4. 监听设定变化问题    普通布局里的监听  比较简单 先通过findViewById()获得目标View  再在其上注册监听器即可



但是 PreferenceActivity 并没有提供findViewById()  也就无法监听 那么 怎么做呢?  



- 得到SharedPreferences 句柄


sp = PreferenceManager.getDefaultSharedPreferences(this);



- 在 sp 之上注册改变监听器


sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){

@Override
//sharedPreferences:句柄
//key: 改变 键值
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
// TODO Auto-generated method stub

if(key.equals("autoBack")){
Boolean autoBack = sharedPreferences.getBoolean("autoBack", false);
if(autoBack){
Log.d("TAG","autoBack: true!");
}
else {
Log.d("TAG","autoBack: false!");
}
}
}

});



5. Preference 异地使用 即:PreferenceActivity 在一个应用程序 而别处应用程序可能也想改变该数据   怎么做呢?



- 通过getSharedPreferences()  得到SharedPreferences实例


spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );



- 取值


Boolean autoBack = spc.getBoolean("autoBack", false);



- 赋值


public void putValue(String key, Boolean value){
spe = spc.edit();
spe.putBoolean(key, value);
spe.commit();
}



就这样结束 似乎感觉不爽 所以决定加点料



- ListPreference 使用


<ListPreference
android:key="list1"
android:title="android forum"
android:summary="开发论坛"
android:dialogTitle="请选择论坛"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>



<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries_list_preference">
<item>www.anddev.org</item>
<item>www.eoeandroid.com</item>
<item>developer.android.com</item>
</string-array>
<string-array name="entriesvalue_list_preference">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
</resources>





EditTextPreference 使用


<EditTextPreference
android:key="et1"
android:title="EditTextPreference Sample"
android:summary="点击输入"
android:dialogTitle="输入设置"
android:defaultValue="Hello EditTextPreference"
/>



解决Preferences崩溃的问题:java.lang.ClassCastException: java.lang.Integer


http://www.poemcode.net/2009/06/android_develop_10/



实现类似Android系统中Setting的效果


http://bigcat.easymorse.com/?p=1350

  • PreferenceActivity详解_android

  • 大小: 19.3 KB
  • PreferenceActivity详解_android_02

  • 大小: 15.8 KB
  • PreferenceActivity详解_xml_03

  • 大小: 23.1 KB
  • PreferenceActivity详解_xml_04

  • 大小: 20.2 KB
  • 查看图片附件

标签:xml,PreferenceActivity,详解,Preference,key,autoBack,com
From: https://blog.51cto.com/u_5454003/6238877

相关文章

  • Android中Context详解 ---- 你所不…
    大家好,             Interfacetoglobalinformationaboutanapplicationenvironment.ThisisanabstractclasswhoseimplementationisprovidedbytheAndroidsystem.Itallowsaccesstoapplication-specificresourcesandclasses,aswellasup-c......
  • C++11完美转发及实现方法详解
    C++11标准为C++引入右值引用语法的同时,还解决了一个C++98/03标准长期存在的短板,即使用简单的方式即可在函数模板中实现参数的完美转发。那么,什么是完美转发?它为什么是C++98/03标准存在的一个短板?C++11标准又是如何为C++弥补这一短板的?别急,本节将就这些问题给读者做一一......
  • HTTPS原理详解
    HTTPS(全称:HypertextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。它是一个URIscheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL......
  • Java 网络编程 —— Socket 详解
    构造Socket在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的Socket,构造方法有以下几种重载形式:Socket()Socket(InetAddressaddress,intport)throwsUnknownHostException,IOExceptionSocket(InetAddressaddress,intport,InetAddresslocalAddr,in......
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介模板方法模式(TemplateMethodPattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法,从而对剩余的逻辑有......
  • 《asyncio 系列》3. 详解 Socket(阻塞、非阻塞),以及和 asyncio 的搭配
    楔子在前面两篇文章中,我们介绍了协程、任务和事件循环,研究了如何同时运行长耗时的操作,并探索了一些可以优化此操作的asyncioAPI。然而,到目前为止,我们只是用asyncio.sleep函数模拟了长时间的操作。由于我们想要构建的不仅是演示应用程序,因此我们将使用一些真实世界的阻塞操作......
  • 《asyncio 系列》2. 详解 asyncio 的协程、任务、future,以及事件循环
    楔子上一篇文章我们深入讨论了并发性,探讨了如何同时使用进程和线程实现并发,还探索了如何利用非阻塞IO和事件循环来实现只使用一个线程的并发性。本篇文章将介绍在asyncio中使用单线程并发模型编写程序的基础知识,使用本文中的技术,你将能执行长时间运行的操作,如Web请求、数据......
  • Linux设备驱动开发详解
    Linux内核系列文章Linux内核设计与实现深入理解Linux内核Linux设备驱动程序Linux设备驱动开发详解文章目录Linux内核系列文章前言一、待续前言  本文主要用来摘录《Linux设备驱动开发详解第四版》一书中学习知识点,本书基于Linux4.0版本,源代码摘录基于Linux4.15.18......
  • Python数据类型详解
    Python最基本的内置数据类型包括:布尔型(表示真假的类型,仅包含True和False两种取值);整型(整数,例如42、10000000);浮点型(小数,例如3.14159,或用科学计数法表示的数字,例如1.0e8,它表示1乘以10的8次方,也可写作10000000.0);字符串型(字符组成的序列);一、变量Python里所有数据——布尔值、整数、浮点......
  • 【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图
    一.本次需求背景本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解之前的文章我们已经对爬取的数据做了清洗处理,然后又对其数据做了一个薪资数据的倾斜情况以及盒图离群点的探究。我们这次的需求是:使用散点图、使用......