PreferenceFragment的使用

PreferenceFragment的使用文章目录 PreferenceFr 简介 PreferenceFr 使用 PreferenceFr 扩展 PreferenceFr 简介在我们写一个项目的时候 基本都有选项设置界面 这类设置界面的原理基本都是本地的一些个性化设置 通过读取本地设置来改变某些差异显示 例如字体大小 主题颜色 WIFI 自动下载等 这些设置一般都会使用 Preference 来保存

PreferenceFragment简介

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

PreferenceFragment使用

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




  1. 在res目录下创建xml目录
    创建xml目录

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

 
    <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> 
  1. 继承PreferenceFragment,在onCreate方法中调用addPreferencesFromResource方法加载xml目录下的资源即可
public class PreferenceTestFragment extends PreferenceFragment { 
    @Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_setting);//加载xml文件 } } 
属性名 用途
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()); } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2026年3月26日 下午1:31
下一篇 2026年3月26日 下午1:31


相关推荐

发表回复

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

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