前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >preference用法for_interference用法

preference用法for_interference用法

作者头像
全栈程序员站长
发布2022-10-04 17:55:18
3.6K0
发布2022-10-04 17:55:18
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

文章目录

PreferenceFragment简介

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

PreferenceFragment使用

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

先来使用下:

  1. 在res目录下创建xml目录
  1. 在xml目录下创建xml文件(文件名自己定义即可) 这里演示的文件是pref_setting.xml
代码语言:javascript
复制
<?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>
  1. 继承PreferenceFragment,在onCreate方法中调用addPreferencesFromResource方法加载xml目录下的资源即可
代码语言:javascript
复制
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

默认值

设置点击事件

代码语言:javascript
复制
findPreference("setting_no_img").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

@Override
public boolean onPreferenceClick(Preference preference) { 

//todo
return true;
}
});

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

代码语言:javascript
复制
 getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
PreferenceFragment 扩展

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

代码语言:javascript
复制
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.cn/196256.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月7日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • PreferenceFragment简介
      • PreferenceFragment使用
        • PreferenceFragment 扩展
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档