PreferenceActivity使用介绍

PreferenceActivity使用介绍目录一 Preference 介绍二 PreferencesA 介绍三 PreferenceAc 的使用四 PreferenceAc 分别和 ListFragment PreferenceFr 组合使用五 Preference 数据获取总结一 Preference 介绍 Android 提供的 preference 以键值对的方式来处理这种

目录

一,Preference介绍

二,PreferencesActivity介绍

三,PreferenceActivity的使用

四,PreferenceActivity分别和ListFragment,PreferenceFragment组合使用

五,Preference数据获取

总结


一,Preference介绍

Android提供的preference以键值对的方式来处理这种情况:自动保存设置的数据,并立时生效,而这种使用android sharedpreferences方式进行保存的,不需要我们手动来写sharedpreferences;

常见的Preference控件有:

二,PreferencesActivity介绍

是Android中专门用来实现程序设置界面及参数存储的一个Activity。从Android 3.0以后官方不再推荐直接让PreferenceActivity加载选项设置布局文件,而是建议使用PreferenceFragment(此类在API级别28中已弃用。替代类androidx库下的PreferenceFragmentCompat,有关androidx的问题有很多,这里不过多介绍 ),二者用法类似。PreferenceActivity在API级别29中已被弃用。PreferenceActivity与普通的Activity不同,它不是使用界面布局文件,而是使用选项设置的布局文件

PreferencesActivity官方介绍文档:

https://developer.android.com/reference/android/preference/PreferenceActivity.html

三,PreferenceActivity的使用

3.1,在res下新建xml目录,在xml目录下新建PreferenceActivity需要的布局文件setting.xml(使用PreferenceScreen 最为根节点)

 
    
    
     
     
     
    

在res/values/strings.xml文件中新建以上需要的资源数据

 
    
    
      普通话 
     
    
      粤语 
     
    
      英语 
     
    
      俄语 
     
    
      法语 
     
    
    
    
      mandarin 
     
    
      cantonese 
     
    
      en_us 
     
    
      russian 
     
    
      french 
     
    
   
     love_me 
   

3.2,创建PreferenceActivity的子类SettingActivity

public class SettingActivity extends PreferenceActivity { public static final String PREFER_NAME = "setting"; private EditTextPreference mVadbosPreference; @SuppressWarnings("deprecation") public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); getPreferenceManager().setSharedPreferencesName(PREFER_NAME); addPreferencesFromResource(R.xml.setting); mVadbosPreference = (EditTextPreference)findPreference("setting_preference"); } }

3.3,运行看一下效果图如下: 

 PreferenceActivity使用介绍

注意:运行时候,会自动在/data/data/ /shared_prefs/目录生成一个文件名为setting文件;

四,PreferenceActivity分别和ListFragment,PreferenceFragment组合使用

PreferenceFragment官方文档:

https://developer.android.com/reference/android/preference/PreferenceFragment

4.1,在res下新建xml目录,在xml目录下新建PreferenceActivity需要的布局文件activity_settings.xml(使用preference-headers

 最为根节点,通过header引入Fragment)

 
    
    
    

注意:header各个属性的功能作用;

上面header引入ListFragment的子类ListFragmentSettings代码:

public class ListFragmentSettings extends ListFragment { protected ArrayAdapter 
   
     mAdapter; protected String mData[]; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mData = getActivity().getResources().getStringArray(R.array.contries); mAdapter = new ArrayAdapter 
    
      (getActivity(), android.R.layout.simple_list_item_single_choice, mData); setListAdapter(mAdapter); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_radio_zone_settings, container,false); return view; } public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); } } 
     
   

上面header引入PreferenceFragment的子类PreferenceFragmentTest代码:

public class PreferenceFragmentTest extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //从xml文件加载选项 addPreferencesFromResource(R.xml.fragment_preference_test); } }

fragment_preference_test布局文件(也是在res/xml/目录下)

 
    
    
     
     
      
     
     
      
     
   

 4.2,创建PreferenceActivity的子类PreferenceActivityTest(名字都是随便起的)

public class PreferenceActivityTest extends PreferenceActivity { private static List 
   
     fragments = new ArrayList 
    
      (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (hasHeaders()) { Button button = new Button(this); button.setText("Exit"); setListFooter(button); } } @Override public void onBuildHeaders(List 
     
target) { loadHeadersFromResource(R.xml.activity_settings, target);//从xml文件加载Preference选项 fragments.clear(); for (Header header : target) { fragments.add(header.fragment); } } //android 4.3以上版本需要做验证,验证方式有很多 https://www.manongdao.com/article-73175.html @Override protected boolean isValidFragment(String fragmentName) { return fragments.contains(fragmentName); } }

4.3,运行后的效果图:

PreferenceActivity使用介绍

 注意:ListFragment导入import android.app.ListFragment;别导入V4包下的(切记哦),如果导入V4包下的会出现  java.lang.ClassCastException异常;详细详细异常信息:

java.lang.RuntimeException:Unable to start activity ComponentInfo{com.ang.demo/com.ang.demo.ui.activity.PreferenceActivityTest}: android.app.Fragment$InstantiationException: Trying to instantiate a class com.ang.demo.ui.fragment.ListFragmentSettings that is not a Fragment

五,Preference数据获取

以上都是Preference的使用和保存数据;如何获取Preference的数据呢;其实和shardpreference获取数据一样;通过key获取;

总结

讲了这么多,其实都是 Preference的子类在PreferenceActivity和PreferenceFragment中的应用;以上实现设置的功能,谷歌官方文档推荐使用androidx包下的Preference及子类和PreferenceFragmentCompat;总是还是v4 v7 v13等support 库迁移androidx的问题;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177444.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:30
下一篇 2026年3月26日 下午7:30


相关推荐

  • Oracle的DDL和DML

    Oracle知识点整理(二)前言SQLSQL的分类Oracle的数据类型NUMBERCHARVARCHAR/VARCHAR2DATESQL操作创建表查看表结构删除表修改表修改表名修改表的结构新增字段修改字段删除字段新增数据修改数据删除数据前言这一章主要介绍一下SQL中的DDL和DML,以Oracle为例。SQLSQL:StructuredQueryLanguage结构化查询语言SQL是在关系型数据库上执行数据操作、检索、维护所使用的标准语言。所有的数据库都使用相同或相似的语言。SQL

    2022年4月8日
    76
  • layuiadmin配置mysql_layuiAdmin 后台管理模板

    layuiadmin配置mysql_layuiAdmin 后台管理模板完全由layui自有的前端架构实现而成的一套通用型后台管理模板系统iframe版使用简单基于iframe标签页实现,简单实用传统开发模式,撸起袖子直接开干交互体验相比“单页版”略有点欠缺始终基于全新的layui版本面向全屏幕尺寸的响应式适配能力灵活的主题色配置专属的开发者文档,助你快速掌握版本的持续更新,集大众之所需layui社区VIP标识专属的会员专区,与同道中人隔空交流不限制…

    2025年6月27日
    4
  • 谷歌的变种murmurHash算法

    谷歌的变种murmurHash算法谷歌变种murmurHash的编写与测试#include#include#include#include#include#include#includeusingnamespacestd;boolCheckLittleEndin();uint32

    2022年10月19日
    2
  • php 自带过滤和转义函数

    php 自带过滤和转义函数

    2021年10月22日
    44
  • 如何画好业务架构图图片_产品业务流程图怎么画

    如何画好业务架构图图片_产品业务流程图怎么画1:什么是业务架构图描述系统对用户提供了什么业务功能。业务架构图是一种表达业务层级和关系的工具。业务架构图可以降低业务系统的复杂度,提高客户理解度,最终给客户最直观的业务体现。2:怎么画出一个好的业务架构图呢?2.1:熟悉功能必须要对功能特别熟悉,明白自己的软件的业务都有哪些,哪些是核心业务,哪些是边缘业务以及他们之间的关系是什么。2.2:分层将业务进行分层,一般来说上层是具体业务,下层比较抽象。下层为上层进行提供服务。在业务架构图中,上下要进行对齐,体现出它们的支持关系。2.3分功能

    2022年10月11日
    5
  • VC和gcc在保证功能static对线程安全的差异变量

    VC和gcc在保证功能static对线程安全的差异变量

    2022年1月8日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号