androidx.preference框架介绍

一,概要

Preference作为setting核心框架,笔者对此框架做一个简单的解析,androidx.preference本质是对设置领域提供了一层View封装,以android view本身的策略模式进行二次开发,将常用的一些设置样式封装到不同的Preference中,以达到快速开发设置相关功能。并且,此风格与原生setting保持了一致,给用户提供了一致性体验。

以下是该框架类图,

二,入门

1,创建一个空Activity,如下,

2,创建SettingFragment,继承PreferenceFragmentCompat

3,重写onCreatePreferences,方法,此方法在Fragment#onCreate回调,并且通过setPreferenceFromResource解析preference的xml资源。

4,创建prefer_setting.xml,如下,

<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><PreferenceCategory app:title="DJI账户"><Preferenceapp:key="login_dji_account"app:summary="点击事件"app:title="点我呀" /><Preferenceapp:enabled="false"app:key="logout_dji_account"app:title="不可点击" /></PreferenceCategory><PreferenceCategoryapp:initialExpandedChildrenCount="0"app:title="Dialog类型组件"><EditTextPreferenceapp:enableCopying="true"app:key="rtmp_url_pre"app:summary="请设置"app:title="直播推流地址"app:useSimpleSummaryProvider="true" /><ListPreferenceapp:enableCopying="true"app:entries="@array/finishedAction"app:entryValues="@array/finishedAction_values"app:key="uav_finishedAction"app:summary="返航"app:title="任务结束动作"app:useSimpleSummaryProvider="true" /><MultiSelectListPreferenceapp:entries="@array/failSafe"app:entryValues="@array/failSafe_values"app:key="multi_select_list"app:summary="悬停"app:title="失控动作" /></PreferenceCategory><PreferenceCategory app:title="其他的组件"><Preferenceapp:summary="点击可以跳转到百度欸"app:title="跳转Preference"><intentandroid:action="android.intent.action.VIEW"android:data="http://www.baidu.com" /></Preference><SwitchPreferenceCompatapp:key="uav_maxFlightRadiusEnabled"app:selectable="true"app:summary="设置无人机最大可飞行半径距离"app:summaryOn="建议关闭此功能,否则将限制设备最大飞行距离"app:title="限远开关" /><EditTextPreferenceapp:dependency="uav_maxFlightRadiusEnabled"app:key="uav_maxFlightRadius"app:summary="2000"app:title="限远(米)"app:useSimpleSummaryProvider="true" /><Preferenceapp:icon="@mipmap/ic_launcher"app:key="icon"app:summary="可以带Icon的Preference"app:title="图标" /><Preferenceapp:key="single_line_title"app:singleLineTitle="true"app:summary="但是下面的summary就不行了,它依然还是可以换行的,毕竟是注释信息嘛"app:title="这个超级长,并且他不会换行,自带省略号的Preference" /><DropDownPreferenceapp:entries="@array/finishedAction"app:entryValues="@array/finishedAction_values"app:key="dropdown"app:title="点我!点我!点我!"app:useSimpleSummaryProvider="true" /><SeekBarPreferenceapp:defaultValue="20"app:key="seekbar"app:title="基本飞行速度(m/s)" /></PreferenceCategory>
</androidx.preference.PreferenceScreen>

效果如下图,

三,深度解析

1,PreferenceFragmentCompat

笔者暂且从入口PreferenceFragmentCompat#onCreate讲起,如下

首先,创建一个PreferenceManager,关于此类作用见下文。随后,调用onCreatePreferences方法,这是一个abstract方法,子类必须实现,主要来加载xml文件,解析view-tree,笔者跟进。

跟进setPreferenceFomResource,

从xml文件中膨胀出PreferenceScreen,可知,PreferenceScre

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将 MinIO 与 Keycloak OIDC 集成

Keycloak是一种单点登录解决方案。使用Keycloak&#xff0c;用户使用Keycloak而不是MinIO进行身份验证。如果没有Keycloak&#xff0c;您将不得不为每个用户创建一个单独的身份 - 从长远来看&#xff0c;这将很麻烦。您需要一个集中身份解决方案来管理 MinIO 的身份验证和授权。…

OpenHarmony 5.0 纯血鸿蒙系统

OpenHarmony-v5.0-Beta1 版本已于 2024-06-20 发布。 OpenHarmony 5.0 Beta1 版本标准系统能力持续完善&#xff0c;ArkUI 完善了组件通过 C API 调用的能力&#xff1b;应用框架细化了生命周期管理能力&#xff0c;完善了应用拉起、跳转的能力&#xff1b;分布式软总线连接能力…

【面试题】漏洞复现的步骤

漏洞复现是信息安全工作中非常重要的一个环节&#xff0c;它通过对已发现的漏洞进行模拟攻击&#xff0c;来验证漏洞的存在性并深入理解其影响。以下是漏洞复现的主要步骤&#xff0c;并尽量以分点表示和归纳的形式呈现&#xff1a; 1. 收集漏洞信息 从漏洞公告、CVE&#xf…

Vue2中的render函数

Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中&#xff0c;你真的需要 JavaScript 的完全编程的能力。这时你可以用render渲染函数&#xff0c;它比模板更接近编译器 。 在Vue2中&#xff0c;render函数是一个可选的、用于生成虚拟DOM的特殊函数。它是Vu…

国际网络专线怎么开通?

在全球化日益加速的今天&#xff0c;企业越来越需要稳定、高效的网络来支撑他们的跨国业务。国际网络专线&#xff0c;作为外贸企业、出海企业等拓展全球业务的关键基础设施&#xff0c;其重要性不言而喻。那么&#xff0c;企业如何才能开通国际网络专线呢&#xff1f;本文将详…

Amazon Q Developer 实战:从新代码生成到遗留代码优化(下)

简述 本文是使用 Amazon Q Developer 探索如何在 Visual Studio Code 集成编程环境&#xff08;IDE&#xff09;&#xff0c;从新代码生成到遗留代码优化的续集。在上一篇博客《Amazon Q Developer 实战&#xff1a;从新代码生成到遗留代码优化&#xff08;上&#xff09;》中…

docker常见问题-持续更新

docker 启动的问题解决 解决: 下载更新linux的win子系统, 重启就可以 WSL 2 installation is incomplete. 更加报错提示,猜测可能是我们使用的wsl2版本老了,需要我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开。更新包下载链接。 https://ws…

HBase:大数据时代的分布式存储利器

HBase&#xff1a;大数据时代的分布式存储利器 HBase&#xff1a;大数据时代的分布式存储利器1. HBase简介2. HBase特点3. HBase应用场景4. 总结 HBase&#xff1a;大数据时代的分布式存储利器 随着互联网和大数据技术的飞速发展&#xff0c;数据存储和计算需求呈现出爆炸式增…

Arduino - 串行绘图仪

Arduino - Serial Plotter Arduino - 串行绘图仪 In this tutorial, we will learn how to use the Serial Plotter on Arduino IDE, how to plot the multiple graphs. 在本教程中&#xff0c;我们将学习如何在Arduino IDE上使用串行绘图仪&#xff0c;如何绘制多个图形。 A…

webstorm无法识别@路径的问题,左键无法跳转

在项目根目录下创建 webstorm.config.js use strict; const webpackConfig require(vue/cli-service/webpack.config.js); module.exports webpackConfig;webstorm设置里找到以下位置&#xff0c;引入新建的 webstorm.config.js即可&#xff0c;不生效把webstorm重启一下

android Studio 无线开发调试: PC机远程安卓电脑 免费

背景 公司的安卓机比较大&#xff0c;还有连接着串口设备不好挪动。 但是遇到问题调试很麻烦。想找到一套远程调试方法。 实现 要求&#xff1a; adb android Studio 2023.3.1 安卓机IP:1928.168.1.228 直接用adb远程连接&#xff1a;adb connect 1928.168.1.228 默认端口…

HarmonyOS Next开发学习手册——ExtensionAbility

概述 EmbeddedUIExtensionAbility 是EMBEDDED_UI类型的ExtensionAbility组件&#xff0c;提供了跨进程界面嵌入的能力。 EmbeddedUIExtensionAbility需要和 EmbeddedComponent 一起配合使用&#xff0c;开发者可以在UIAbility的页面中通过EmbeddedComponent嵌入本应用的Embed…

读AI新生:破解人机共存密码笔记11智能爆炸

1. 大猩猩问题 1.1. 大约1000万年前&#xff0c;现代大猩猩的祖先创造了进化出现代人类的遗传谱系 1.1.1. 它们的物种基本上没有未来&#xff0c;除了我们屈尊所允许它们拥有的未来 1.1.2. 我们不希望在超级智能机器面前处于类似的地位 1.2. 大猩猩问题就是人类是否能在一个…

电脑提示msvcr120.dll丢失怎样修复

文件功能与重要性&#xff1a;msvcr120.dll 文件的功能和重要性体现在多个方面&#xff0c;以下是对其核心功能的详细分析&#xff1a; 运行时支持 msvcr120.dll 提供了运行时环境&#xff0c;使得使用 Microsoft Visual C 2013 编译的程序能够调用必要的运行时函数。这些函数…

Mysql----表的约束

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、表的约束 表的约束&#xff1a;表中一定要有约束&#xff0c;通过约束让插入表中的数据是符合预期的。它的本质是通过技术手段&#xff0c;让程序员插入正确的数据&#xff0c;约束的最终目标是保证…

Java | Leetcode Java题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int start, int end) {whil…

【机器学习】图神经网络(NRI)模型原理和运动轨迹预测代码实现

1.引言 1.1.NRI研究的意义 在许多领域,如物理学、生物学和体育,我们遇到的系统都是由相互作用的组分构成的,这些组分在个体和整体层面上都产生复杂的动态。建模这些动态是一个重大的挑战,因为往往我们只能获取到个体的轨迹数据,而不知道其背后的相互作用机制或具体的动态…

Shardingsphere-Proxy 5.5.0数据迁移

Shardingsphere-Proxy 5.5.0数据迁移 Shardingsphere系列目录&#xff1a;背景配置集群部署搭建Zookeeper修改shardingsphere-proxy配置重启shardingsphere-proxy 执行数据迁移连接代理数据库实例&#xff08;Navicate&#xff09;应用代理数据库注册目标分片数据库存储单元创建…

如何将图片旋转任意角度?这四种方法轻松将图片旋转至任意角度!

如何将图片旋转任意角度&#xff1f;当我们涉及到图片时&#xff0c;常常会面临角度不佳的挑战&#xff0c;这一问题可能会给我们带来一系列不便&#xff0c;让我们深入探讨这些挑战&#xff0c;并探寻解决之道&#xff0c;首先&#xff0c;错误的角度可能导致视觉失真&#xf…

计算机Java项目|基于SpringBoot的音乐网站

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…