Android开发之PreferenceActivity和PreferenceFragment

article/2025/11/6 2:23:35

在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);}}

展示:


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

相关文章

设置PreferenceFragment主题

整个项目主题颜色暗色&#xff0c;在使用PreferenceFragmentCompat文字也是黑色的导致看不清楚&#xff0c;采取更改PreferenceFragmentCompat主题实现&#xff0c;效果如下&#xff1a; 查看PreferenceFragmentCompat源码看到onCreate开始设置Theme&#xff0c;先获取preferen…

PreferenceFragment和PreferenceActivity

提要&#xff1a;PreferenceFragment展示中设置的值可以通过PreferenceManager.getDefaultSharedPreferences(context).来实现 【正文】 一、PreferenceFragment的引入&#xff1a; PreferenceActivity是一个非常有用的基类&#xff0c;当我们开发Android项目时避免不了选项设置…

彻底变换PreferenceFragment样式和全局设置字体样式的解决方案

一、PreferenceFragment样式修改 新样式 直接上图&#xff0c;原样式为白色样式&#xff0c;即为PreferenceFragment的默认样式&#xff1a; ① 白底黑字&#xff1b;② SwitchPreference开关默认为蓝色&#xff1b; ③ ListPreference列表默认为白色&#xff0c;选中状…

Android之PreferenceFragment详解

【正文】 一、PreferenceFragment的引入&#xff1a; PreferenceActivity是一个非常有用的基类&#xff0c;当我们开发Android项目时避免不了选项设置&#xff0c;这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Pr…

PreferenceActivity和PreferenceFragment实现设置界面

在进行Android开发的过程中&#xff0c;有时需要实现一个设置界面&#xff0c;就像下面的系统的显示设置。这样的界面自己实现起来略显繁琐&#xff0c;好在Android中已经实现了这样的设置界面&#xff0c;那就是PreferenceActivity。并且PreferenceActivity还有一个莫大的好处…

PreferenceFragment设置界面的编写

效果图&#xff1a; 布局文件&#xff1a; <PreferenceScreenxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"><PreferenceCategoryandroid:title"string/basic_setting…

Android PreferenceFragment

PreferenceFragment用来显示首选项的设置&#xff0c;效果图如下&#xff1a; 主布局文件&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_widt…

PreferenceFragment使用

PreferenceFragment 在Android3.0之前&#xff0c;设置界面使用PreferenceActivity&#xff0c;在Android3.0之后&#xff0c;官方推荐使用PreferenceFragment&#xff0c;对应于碎片化技术。 使用 新建Fragment 新建GeneralPreferenceFragment 继承PreferenceFragment&…

Android设置页面之PreferenceFragment的简单使用示例

1.PreferenceFragment介绍 a.PreferenceFragment实际为Fragment的一个子类 b.创建一个PreferenceFragment需要绑定一个xml来显示视图 c.绑定后没就可以当作普通Fragment使用&#xff0c;只是每new一个实例就会创建一个SharePreference,把之前绑定的xml中的值写入保存&#x…

Personal preference

Personal preference 相关文章Algorithm&#xff1a;Algorithm的进阶之路 目录 程序猿成长之路 Personal 历史问题记录 程序猿成长之路 Personal 1、C:\Users\99386\AppData\Local\kingsoft\WPS Cloud Files\userdata\qing\filecache\jazve的云文档\knowledge 历史问题记录…

PreferenceFragment详解

在上篇文章中我们讲述了Android 5.1 Settings的源码解析Android 5.1 Settings模块源码分析_Flying snow-CSDN博客&#xff0c; 其中在介绍到Android的Sub Setting时&#xff0c;我们说到基本上都是使用的PreferenceFragment技术&#xff0c;今天我们就来了解一下关于Preferenc…

Android进阶——Preference详解之Preference系的基本应用和管理(二)

引言 前面一篇文章Android进阶——Preference详解之初识Preference及Preference系&#xff08;一&#xff09;简单描述下了Preference的家族构成和基本知识&#xff0c;相信对于Preference早已不会陌生&#xff0c;肯定也跃跃欲试了吧&#xff0c;这篇文章就给大家总结下Prefe…

Android自定义PreferenceScreen的Layout布局,并获取控件

先说一下需求&#xff0c;要在<PreferenceScreen>里添加一个自定义的Layout&#xff0c;实现如下效果&#xff1a; 操作步骤&#xff1a; 1、在res/layout目录创建一个xml文件&#xff0c;名为my_preference_layout.xml&#xff0c;代码如下&#xff1a; <?xml ver…

PreferenceScreen的使用(非常有用)

在res下建个xml文件夹,建立2个xml文件: preferencescreentest_one.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:key="using_categor…

使用PreferenceActivity和PreferenceScreen构建应用的设置

对于每个应用程序来说&#xff0c;都要有一些属于用户自己的设置&#xff0c;满足不同需求。当我们点击menu时&#xff0c;如下&#xff1a; 点击settings时&#xff0c;出现&#xff1a; 那么这样的效果是怎么实现的呢&#xff1f;我只是来个简单介绍&#xff0c;给自己做备忘…

PreferenceScreen

对于每个应用程序来说&#xff0c;都要有一些属于用户自己的设置&#xff0c;满足不同需求。当我们点击menu时&#xff0c;如下&#xff1a; 点击settings时&#xff0c;出现&#xff1a; 那么这样的效果是怎么实现的呢&#xff1f;我只是来个简单介绍&#xff0c;给自己做备忘…

PreferenceFragment的使用

文章目录 PreferenceFragment简介PreferenceFragment使用PreferenceFragment 扩展 PreferenceFragment简介 在我们写一个项目的时候&#xff0c;基本都有选项设置界面&#xff0c;这类设置界面的原理基本都是本地的一些个性化设置&#xff0c;通过读取本地设置来改变某些差异显…

Android中Preference的使用以及监听事件分析

转载请注明出处: http://blog.csdn.net/qinjuning 在Android系统源码中&#xff0c;绝大多数应用程序的UI布局采用了Preference的布局结构&#xff0c;而不是我们平时在模拟器中构建应用程序时使用的View布局结构&#xff0c;例如&#xff0c;Setting模块中布局。当然&#xf…

screentogif 录屏

screentogif的由来 screentogif于2013年诞生&#xff0c;主要的开发者是巴西帅哥Nicke Manarin。 最初的目的只是为了学习和提供一款软件供开发者个人使用。 在2016重新启动项目&#xff0c;使得screentogif变得更加实用。 screentogif的安装 进入官网下载软件安装包。 s…

android PreferenceScreen使用笔记

preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><Preference android:title="基本信息"android:layout="@layout/tex…