在PreferenceActivity中,给我们提供了四个选项集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。

注意:

通过PreferenceActivity生成的XML文件,命名方式是定死了的,生成的XML文件在data/data/<工程名>/shared_prefs/下,名字为“<工程名>_Preference.xml”这是无法改变的。

1、PreferenceList的介绍:

api介绍:


有两个属性要注意:

android:entries: 设置的内容是我们在设置时看到的内容android:entryValues:保存在preferences.xml中的值其余属性同上。使用如下:
//这个在String里面使用
<string-array name="array_sex"><item>男</item><item>女</item>
</string-array>
<string-array name="array_sex_value"><item>1</item><item>2</item>
</string-array>//这个在xml里面使用(layout)
<ListPreferenceandroid:key="list_key"android:title="性别"android:entryValues="@array/array_sex_value"android:entries="@array/array_sex"android:dialogTitle="性别列表"android:summary="请选择您的性别"/>

activity:

package com.fluter.seer.flutertest;import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.Nullable;public class SecondActivity extends PreferenceActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 放入设置版面文件* 在这里,R.xml.mylistperference可以看作是布局文件*//** addPreferencesFromResource方法在Android3.0中就被弃用了* 但却没有替代方法* 谷歌的想法是,希望我们继承PreferenceFragment来实现默认选项页* 但是这太难了。真的*/addPreferencesFromResource(R.xml.listperference);}
}

xml/listperference.xml

 注意,这个android:key的值也是Preference文件里面的XML“键”名android:title 大标题android:summary 标题下面的小字(这个要作为选项卡才有)android:entries 弹出的对话框中,列表显示的文本内容,注意哦,这里指定的是一个数组哦android:entryValues 与android:entries相对应的值android:defaultValue 当对应值不存在时的默认值android:dialogTitle 弹出的对话框中的标题信息更多的标签设置等你来发掘-->
<PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"android:key="screen_list"android:title="标题"android:summary="说明摘要"><ListPreferenceandroid:key="myListPreference"android:title="标题"android:summary="说明摘要"android:entries="@array/list_entries"android:entryValues="@array/list_entries_value"android:dialogTitle="这里是弹出框"android:defaultValue="@string/deflault_list_entries_value"></ListPreference></PreferenceScreen>

string.xml

<resources><string name="app_name">FluterTest</string><string name="deflault_list_entries_value">默认实现</string><string-array name="list_entries"><item>陕西</item><item>山西</item><item>河北</item></string-array><string-array name="list_entries_value"><item>老师</item><item>学生</item><item>家长</item></string-array>
</resources>

项目结构:

展示结果:

2、CheckBoxPreference的介绍

api介绍:


有两个属性要注意:

android:summaryOn:开启说明
android:summaryOff:关闭说明<CheckBoxPreferenceandroid:key="check_key"android:title="自动保存进度条"android:summaryOn="自动保存:开启"android:summaryOff="自动保存:关闭"/>

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:key="screen_list"android:summary="说明摘要"android:title="标题" ><CheckBoxPreferenceandroid:key="medf"android:summaryOff="马尔代夫未被选中"android:summaryOn="马尔代夫被选中了"android:title="马尔代夫" ></CheckBoxPreference><CheckBoxPreferenceandroid:key="mlqs"android:summaryOff="毛里求斯未被选中"android:summaryOn="毛里求斯被选中了"android:title="毛里求斯" ></CheckBoxPreference>
</PreferenceScreen>

activity修改:

package com.fluter.seer.flutertest;import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.Nullable;public class SecondActivity extends PreferenceActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 放入设置版面文件* 在这里,R.xml.mylistperference可以看作是布局文件*//** addPreferencesFromResource方法在Android3.0中就被弃用了* 但却没有替代方法* 谷歌的想法是,希望我们继承PreferenceFragment来实现默认选项页* 但是这太难了。真的*/addPreferencesFromResource(R.xml.checkbox);}
}

项目结构:

展示效果:

3、EditTextPreference的介绍

api介绍:


属性:android:dialogTitle 对话框标题android:key 标识keyandroid:summary简要说明android:title标题<EditTextPreferenceandroid:key="edt_key"android:title="填写用户名"android:summary="用户名不能为空"android:dialogTitle="输入您的用户名"android:defaultValue="默认值"android:dialogMessage="使用汉语"/>

xml/edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  android:key="edittext_screen"  android:summary="屏幕简要说明"  android:title="屏幕标题" >  <EditTextPreference  android:dialogTitle="输入您的名称:"  android:key="editWord"  android:defaultValue="im human"  android:summary="简要说明"  android:title="输入名称" >  </EditTextPreference>  </PreferenceScreen>  

项目结构:

效果展示:

4 RingtonePreference 系统铃

api介绍:


android:ringtoneType 设置响铃模式,
主要包括ringtone、notification、alarm、all
android:showSilent 是否显示静音  <RingtonePreferenceandroid:ringtoneType="all"android:title="设置铃铛"android:summary="选择铃铛"android:key="ring_key"android:showDefault="true"android:showSilent="true" />

rating.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><RingtonePreferenceandroid:ringtoneType="all"android:title="设置铃铛"android:summary="选择铃铛"android:key="ring_key"android:showDefault="true"android:showSilent="true" />
</PreferenceScreen>

项目结构:

在activity里面的引用:

ringtonePreference = (RingtonePreference) findPreference("ring_key");
editTextPreference = (EditTextPreference) findPreference("edt_key");
listPreference = (ListPreference) findPreference("list_key");
checkBoxPreference = (CheckBoxPreference) findPreference("check_key");

事件监听总结: 

ringtonePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {
//返回铃声所在库的地址 String类型  如:content://media/internal/audio/media/32String uri = newValue.toString();Toast.makeText(getActivity(), ("路径:" + uri), Toast.LENGTH_SHORT).show();return false;}
});
ringtonePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Overridepublic boolean onPreferenceClick(Preference preference) {Toast.makeText(getActivity(), "preference.getTitle():" + preference.getTitle(), Toast.LENGTH_SHORT).show();return false;}
});
editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {
//返回确认后的新值 String类型Toast.makeText(getActivity(), ((String) newValue), Toast.LENGTH_SHORT).show();return false;}
});listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {
//返回确认后的新值 String类型Toast.makeText(getActivity(), ((String) newValue), Toast.LENGTH_SHORT).show();return false;}
});checkBoxPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {
//返回 true  false  boolean类型boolean  isSelected = (boolean) newValue;if (isSelected){Toast.makeText(getActivity(), "开启", Toast.LENGTH_SHORT).show();}else {Toast.makeText(getActivity(), "关闭", Toast.LENGTH_SHORT).show();}
return false;}
});

注意:从Android 3.0以后官方不再推荐直接让PreferenceActivity加载选项设置布局文件,而是建议使用PreferenceFragment

第一步:创建frgment

package com.example.m05_preffragment01;import android.os.Bundle;
import android.preference.PreferenceFragment;public class PrefFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//从xml文件加载选项 addPreferencesFromResource(R.xml.preferences);}}

第二步:创建activity

package com.example.m05_preffragment01;import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//加载PrefFragmentFragmentManager fragmentManager = getFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();PrefFragment prefFragment = new PrefFragment();transaction.add(R.id.prefFragment, prefFragment);transaction.commit();}}

第三步:创建preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 设置的类别 --><PreferenceCategoryandroid:key="mylocation"android:summary="我的位置"android:title="我的位置源" ><CheckBoxPreferenceandroid:key="wireless_network"android:summary="使用无线网络查看应用程序(例如Google地图)中的位置"android:title="使用无线网络" /><CheckBoxPreferenceandroid:key="gps_satellite_setting"android:summary="定位时,精确到街道级别(取消选择可节约电量)"android:title="启用GPS卫星设置" /></PreferenceCategory><PreferenceCategoryandroid:key="mymessage"android:summary="个人信息设置"android:title="个人信息设置" ><CheckBoxPreferenceandroid:key="yesno_save_individual_info"android:title="是否保存个人信息" /><EditTextPreferenceandroid:key="individual_name"android:summary="请输入真实姓名"android:title="姓名 " /><ListPreferenceandroid:entries="@array/cities"android:entryValues="@array/cities"android:key="mycity"android:summary="所属城市"android:title="所属城市" /></PreferenceCategory></PreferenceScreen>

监听事件onPreferenceTreeClick()方法:

package com.example.m05_preffragment01;import android.os.Bundle;import android.preference.CheckBoxPreference;import android.preference.EditTextPreference;import android.preference.Preference;import android.preference.PreferenceFragment;import android.preference.PreferenceScreen;public class PrefFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//从xml文件加载选项 addPreferencesFromResource(R.xml.preferences);}@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {//如果“保存个人信息”这个按钮被选中,将进行括号里面的操作if("yesno_save_individual_info".equals(preference.getKey())) {            CheckBoxPreference checkBoxPreference = (CheckBoxPreference)findPreference("yesno_save_individual_info");EditTextPreference editTextPreference = (EditTextPreference)findPreference("individual_name");//让editTextPreference和checkBoxPreference的状态保持一致editTextPreference.setEnabled(checkBoxPreference.isChecked());}// TODO Auto-generated method stubreturn super.onPreferenceTreeClick(preferenceScreen, preference);}}

展示:

Android开发之PreferenceActivity和PreferenceFragment相关推荐

  1. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  2. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  3. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  4. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  5. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  6. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  7. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

  8. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  9. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  10. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建 參考http://blog.csdn.net/xiaoliouc/article/details/8705 ...

最新文章

  1. 基于netty实现mq
  2. 刚刚,ACM宣布三位深度学习之父共同获得2018年图灵奖!
  3. 洛谷 - P1025 数的划分(计数dp)
  4. 深度挖掘 Laravel 生命周期
  5. [Leetcode][第78题][JAVA][子集][位运算][回溯]
  6. java beanutil 工具类_实现BeanFactoryAware来达到Spring静态方法获取Bean对象的BeanUtil工具类...
  7. 进阶 vue,需要掌握哪些知识?
  8. “领跑者”计划倒逼光伏产业升级效果显现
  9. 算法导论(原书第三版)答案与学习笔记(一)
  10. 【Redis 开发与运维】总结篇
  11. word文字上下间距怎么调_Word表格调整(行高、文字上下间距等)
  12. ssm框架搭建连接mysql_搭建SSM框架(一) - xiaoqi__y的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 有限公司清算组成员怎样构成
  14. 详解java -jar命令及SpringBoot通过java -jav启动的过程
  15. 单片机学习笔记-数码管的显示
  16. win10右键“新建”时响应速度非常缓慢怎么办
  17. 2014美国大学计算机科学专业排名,2014年美国大学计算机科学专业排名.doc
  18. 中国能跑出来自己的Salesforce吗?
  19. Eddy's爱好 HDU - 2204
  20. 预测本次出差顺利否?

热门文章

  1. 【NB-IoT模块显示屏逻辑显示】
  2. 努比亚修复工具_努比亚 X6 救砖教程 努比亚 NX601J恢复救砖教程
  3. 5.1声道测试文件下载
  4. mysql sql语句面试经典50题_常见的SQL面试题:经典50题(简单)
  5. 软件质量管理体系-ISO 9000
  6. 工业机器人技术试题_《工业机器人技术基础》课程试卷A卷
  7. 最新!2022 LaTeX安装教程(Windows)
  8. 配置Eclipse环境变量
  9. ppt设置外观样式_ppt设置图片样式_PPT如何快速修改图像样式图文教
  10. prn文件导入Matlab,PPP_code(Matlab) GPS精密单点定位中的周跳探测与修复的算法研究代码 GPS develop 238万源代码下载- www.pudn.com...