2024年3月7日发(作者:)

目录

PreferenceFragment简介

PreferenceFragment使用

PreferenceFragment 扩展

PreferenceFragment简介

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

PreferenceFragment使用

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

先来使用下:

在res目录下创建xml目录

在xml目录下创建xml文件(文件名自己定义即可)

这里演示的文件pref_

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

public class PreferenceTestFragment extends PreferenceFragment {

@Override

public void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

aPreferencesFromResource(_setting);//加载xml文件

}

}

运行:

pref_中使用的控件可以查看ence包下,这里面有几个常用的属性:

属性名

android:key

用途

存储key,这个就SharedPreferences存储时的key

android:title

标题

android:defaultValue

默认值

设置击

findPreference("setting_no_img").setOnPreferenceClickListener(new

erenceClickListener() {

@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(_theme_preference_preview);

}

// 绑定视图

@Override

protected void onBindView(View view) {

View(view);

int color = tance().getThemeColor();

circleImageView = (CircleView) ewById(_preview);

kgroundColor(color);

}

/**

* 刷新颜色显示

*/

public void updateColor() {

kgroundColor(tance().getThemeColor());

}

}