Android中PreferenceFragment的使用详解

时间:2021-08-12 08:47:34

PreferenceFragment简介

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

 

PreferenceFragment使用

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

Android中PreferenceFragment的使用详解

先来使用下:

在res目录下创建xml目录

Android中PreferenceFragment的使用详解

在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文件
  }
}

运行效果:

Android中PreferenceFragment的使用详解

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 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/zhe_ge_sha_shou/article/details/87633282