Android中PreferenceFragment的使用详解

 更新时间:2021年09月07日 16:52:00   作者:这个杀手不太累  
本文主要介绍了Android中PreferenceFragment的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

PreferenceFragment简介

在我们写一个项目的时候,基本都有选项设置界面,这类设置界面的原理基本都是本地的一些个性化设置,通过读取本地设置来改变某些差异显示(例如字体大小,主题颜色,WIFI自动下载等)。这些设置一般都会使用Preference来保存,Android专门为这种Activity提供了便捷的基类PreferenceActivity(如果是Fragment,使用PreferenceFragment,现在推荐使用v7包下的PreferenceFragmentCompat),这些类内部封装了Preference,会帮我们自动读写设置,方便开发者便捷完成这类功能。

PreferenceFragment使用

PreferenceFragment位于android.preference包下,现在推荐使用v7包下的,这里还是使用这个来说明,原理是一样的。

包

先来使用下:

在res目录下创建xml目录

创建xml目录

在xml目录下创建xml文件(文件名自己定义即可)
这里演示的文件是pref_setting.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <CheckBoxPreference
        android:defaultValue="false"
        android:key="setting_no_img"
        android:summary="仅在WIFI环境下显示图片"
        android:title="无图模式" />

    <PreferenceCategory android:title="设置">

        <EditTextPreference
            android:hint="设置用户名"
            android:key="setting_name"
            android:title="设置用户名" />

        <Preference
            android:key="setting_font_size"
            android:summary="设置字体大小"
            android:title="设置字体大小" />
    </PreferenceCategory>

    <SwitchPreference
        android:defaultValue="false"
        android:key="setting_switch"
        android:title="设置模式-Switch" />

    <RingtonePreference
        android:key="setting_ring"
        android:title="设置模式-Ringtone" />
</PreferenceScreen>

继承PreferenceFragment,在onCreate方法中调用addPreferencesFromResource方法加载xml目录下的资源即可

public class PreferenceTestFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_setting);//加载xml文件
    }
}

运行效果:

效果图

pref_setting.xml中使用的控件可以查看android.preference包下,这里面有几个常用的属性:

属性名 用途
android:key 存储key,这个就是SharedPreferences存储时的key
android:title 标题
android:defaultValue 默认值

设置点击事件

findPreference("setting_no_img").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
				//todo
                return true;
            }
        });

findPreference中的key就是xml中声明的key。
可以使用registerOnSharedPreferenceChangeListener来监听SharedPreferences值改变。

 getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

PreferenceFragment 扩展

可以通过继承Preference来实现自定义控件

public class ThemePreference extends Preference {

    private CircleView circleImageView;

    public ThemePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        // 加载布局文件
        setWidgetLayoutResource(R.layout.item_theme_preference_preview);
    }

	// 绑定视图
    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        int color = CommonSettingUtil.getInstance().getThemeColor();
        circleImageView = (CircleView) view.findViewById(R.id.iv_preview);
        circleImageView.setBackgroundColor(color);
    }

    /**
     * 刷新颜色显示
     */
    public void updateColor() {
       circleImageView.setBackgroundColor(CommonSettingUtil.getInstance().getThemeColor());
    }
}

到此这篇关于Android中PreferenceFragment的使用详解的文章就介绍到这了,更多相关Android PreferenceFragment 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决IDEA target文件夹越来越大的问题

    解决IDEA target文件夹越来越大的问题

    这篇文章主要介绍了解决IDEA target文件夹越来越大的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • log4j2采用AsyncLogger出现的错误及解决方案

    log4j2采用AsyncLogger出现的错误及解决方案

    这篇文章主要介绍了log4j2采用AsyncLogger出现的错误及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 分享Java多线程实现的四种方式

    分享Java多线程实现的四种方式

    这篇文章主要介绍了分享Java多线程实现的四种方式,文章基于 Java的相关资料展开多线程的详细介绍,具有一的的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • @RefreshScope在Quartz 触发器类导致异常问题解决分析

    @RefreshScope在Quartz 触发器类导致异常问题解决分析

    这篇文章主要为大家介绍了@RefreshScope在Quartz 触发器类导致异常问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 入门java的第一步HelloWorld

    入门java的第一步HelloWorld

    这篇文章主要介绍了入门java的第一步-Hello,World,文中通过示例代码介绍的非常详细,对大家的java初步学习具有一定的学习价值,需要的朋友可以参考下
    2021-04-04
  • Java8 String内存优化之字符串常量池详解

    Java8 String内存优化之字符串常量池详解

    这篇文章主要介绍了Java8 String内存优化之字符串常量池,具有很好的参考价值,希望对大家有所帮助,
    2023-07-07
  • java统计字符串单词个数的方法解析

    java统计字符串单词个数的方法解析

    在一些项目中可能需要对一段字符串中的单词进行统计,本文在这里分享了一个简单的demo,有需要的朋友可以拿去看一下
    2017-01-01
  • 如何使用mybatis-generator自动生成代码

    如何使用mybatis-generator自动生成代码

    这篇文章主要介绍了如何使用mybatis-generator自动生成代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 剖析Java中在Collection集合中使用contains和remove为什么要重写equals

    剖析Java中在Collection集合中使用contains和remove为什么要重写equals

    这篇文章主要介绍了Collection集合的contains和remove方法详解remove以及相关的经验技巧,通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Java模拟实现ATM机

    Java模拟实现ATM机

    这篇文章主要为大家详细介绍了Java模拟实现ATM机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03

最新评论