androidx.preference框架介绍

news2024/11/27 6:19:08

一,概要

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账户">
        <Preference
            app:key="login_dji_account"
            app:summary="点击事件"
            app:title="点我呀" />
        <Preference
            app:enabled="false"
            app:key="logout_dji_account"
            app:title="不可点击" />
    </PreferenceCategory>

    <PreferenceCategory
        app:initialExpandedChildrenCount="0"
        app:title="Dialog类型组件">
        <EditTextPreference
            app:enableCopying="true"
            app:key="rtmp_url_pre"
            app:summary="请设置"
            app:title="直播推流地址"
            app:useSimpleSummaryProvider="true" />
        <ListPreference
            app:enableCopying="true"
            app:entries="@array/finishedAction"
            app:entryValues="@array/finishedAction_values"
            app:key="uav_finishedAction"
            app:summary="返航"
            app:title="任务结束动作"
            app:useSimpleSummaryProvider="true" />
        <MultiSelectListPreference
            app:entries="@array/failSafe"
            app:entryValues="@array/failSafe_values"
            app:key="multi_select_list"
            app:summary="悬停"
            app:title="失控动作" />
    </PreferenceCategory>
    <PreferenceCategory app:title="其他的组件">
        <Preference
            app:summary="点击可以跳转到百度欸"
            app:title="跳转Preference">
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.baidu.com" />
        </Preference>
        <SwitchPreferenceCompat
            app:key="uav_maxFlightRadiusEnabled"
            app:selectable="true"
            app:summary="设置无人机最大可飞行半径距离"
            app:summaryOn="建议关闭此功能,否则将限制设备最大飞行距离"
            app:title="限远开关" />
        <EditTextPreference
            app:dependency="uav_maxFlightRadiusEnabled"
            app:key="uav_maxFlightRadius"
            app:summary="2000"
            app:title="限远(米)"
            app:useSimpleSummaryProvider="true" />
        <Preference
            app:icon="@mipmap/ic_launcher"
            app:key="icon"
            app:summary="可以带Icon的Preference"
            app:title="图标" />
        <Preference
            app:key="single_line_title"
            app:singleLineTitle="true"
            app:summary="但是下面的summary就不行了,它依然还是可以换行的,毕竟是注释信息嘛"
            app:title="这个超级长,并且他不会换行,自带省略号的Preference" />
        <DropDownPreference
            app:entries="@array/finishedAction"
            app:entryValues="@array/finishedAction_values"
            app:key="dropdown"
            app:title="点我!点我!点我!"
            app:useSimpleSummaryProvider="true" />

        <SeekBarPreference
            app: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.coloradmin.cn/o/1874942.html

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

相关文章

labview排错

源代码正常跑&#xff0c;应用程序报这个错&#xff0c;是因为源代码的可以找到项目路径内所有dll的路径&#xff0c;而应用程序只能找到data文件夹的dll文件 解决查看源代码中.net的程序集的路径&#xff0c;复制对应的dll到data文件夹下 在执行developinterface.dll出现labv…

k8s架构设计思想

1.谷歌borg云计算管理平台 一类&#xff1a;infrastucture platform software 另一类&#xff1a;borg为主的非虚拟化技术&#xff0c;调度进程 核心是轻量级作业调度&#xff0c;不是做虚拟化/云平台的 borg本身用了一些容器技术 生产业务product workload要求高可用&#xf…

知名大客户销售讲师培训师专家顾问讲运营商政企客户银行公司金融客户销售AI数字B2B市场B2B销售技巧B2B销售策略大客户销售技巧人工智能高价值客户销售

最近在写一本新书AI时代的大客户销售个人如何转型&#xff1f;个人核心能力与方法论如何办&#xff1f; 传统的大客户销售、顾问式销售正在走向高原&#xff0c;销售人效比及效率到达边界&#xff0c;AI数字化销售正在扑面而来。 AI时代销售的未来&#xff1a;销售的必经之路 …

深度解读昇腾CANN计算图优化技术,提升算法计算效率

随着大模型时代的到来&#xff0c;AI算法的能力上限不断被刷新&#xff0c;算力门槛也在持续飙升&#xff0c;如何在有限的计算资源的条件下优化和训练模型显得尤其重要。面向计算图编译和运行优化场景&#xff0c;昇腾AI异构计算架构CANN&#xff08;Compute Architecture for…

餐饮点餐系统

餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。 1.DDL CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,email VARCHAR(100) UNIQUE…

http服务网络请求如何确保数据安全(含python示例源码)

深度学习类文章回顾 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整体流程…

命令行中关于windows hash md5 , mac hash md5 , linux hash md5 文件校验方式

md5&#xff0c; sha-1 &#xff0c;sha256. windows certutil -hashfile filename md5certutil -hashfile filename sha1certutil -hashfile filename sha256macos 平台 md5 filenameshasum -a 1 filenameshasum -a 256 filenamelinux 平台 md5sum filenameshasum -a 1 fil…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机&#xff1f; 刷机失败&#xff1f; 无法方控&#xff1f; 无法画中画? 原车音乐跟我安装的音乐一起播放&#xff1f; 原车音乐停了&#xff0c;我安装的软件也跟着没声音了&#xff1f; 调节声音时忽大忽小&#xff1f; 怎么安装软件&#xff1f; 软件…

spring boot (shiro)+ websocket测试连接不上的简单检测处理

1、用前端连接测试的demo一切正常&#xff0c;但是到了项目中连接不上了 一开始以为是地址错&#xff0c;但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了&#xff0c;所以就访问不到了地址&#xff0c;那么就放行。 3、再次用apifox测试&#xff0c;成功了。 当然…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

Java nio 的线程通信机制线程通信Pipe

Java的Pipe是一种新的线程通信机制&#xff0c;传统的线程通信可以是通过共享内存的方式&#xff0c;socket等方式&#xff0c;而Pipe是通过Java NIO 通信的方式实现共享内存&#xff0c;优点类似于go语言的管道 先上代码 public static void main(String[] args) throws IOEx…

国外的Claude3.5 Sonnet Artifacts和国内的CodeFlying孰强孰弱?

在Claude 3.5 Sonnet发布后&#xff0c;最受大家关注的问题应该就是它在编写代码能力上的变化。 要知道在Claude3.0发布以来的这几个月就因为它的编写代码能力而一直受到人们的诟病。 那Anthropic这次终于是不负众望&#xff0c;在Claude 3.5 Sonnet中更新了一个叫做Artifact…

.net core 的 winform 的 浏览器控件 WebView2

在.NET Core WinForms应用程序中&#xff0c;没有直接的“浏览器控件”&#xff0c;因为WinForms不支持像WebBrowser控件那样的功能。但是&#xff0c;你可以使用WebView2控件&#xff0c;它是一个基于Chromium的浏览器内核&#xff0c;可以在WinForms应用程序中嵌入Web内容。 …

用英文介绍芝加哥(1):Making Modern Chicago Part 1 Building a Boomtown

Making Modern Chicago | Part 1: Building a Boomtown Link: https://www.youtube.com/watch?vpNdX0Dm-J8Y&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index4 Summary Summary of Chicago’s History and Development Urban Planning and Growth Chicago, often r…

新手入门爬虫:从零开始,轻松掌握网络数据采集技术(有实战)

在互联网高速发展的今天&#xff0c;数据已经成为了各行各业的重要资源。而爬虫作为一种特殊的程序&#xff0c;可以帮助我们快速地获取到大量的数据。本文将从零开始&#xff0c;带领大家了解爬虫的基本概念、原理以及实践操作&#xff0c;帮助新手轻松掌握网络数据采集技术。…

浅谈逻辑控制器之Switch控制器

浅谈逻辑控制器之Switch控制器 Switch Controller是Apache JMeter中一个强大的逻辑控制器&#xff0c;它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同&#xff0c;Switch Controller根据提供的“switch value”来决定执行哪…

行业推荐!IG5216量产工具下载,IG5216开卡软件分享

国内固态硬盘常用&#xff0c;且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具&#xff0c;不同的量产工具支持的闪存颗粒也有差异&#xff0c;因此要根据固态硬盘实际的主控型号…

Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)

一、背景 前文的http请求都是静态的&#xff0c;像compose a new request&#xff0c;仅适用于接口的自测。 回放repeat 一个 http 请求&#xff0c;也无法做到动态调试。 这里的动态还是静态&#xff0c;是站在客户端的角度&#xff0c;数据是实时的&#xff0c;可调试的。 …

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi&#xff0c;可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小&#xff0c;在输出的时候保持宽度和高度一致即可&#xff0c;步骤如下&#xff1a; 如上的“10…

Verilog进行结构描述(四):Verilog逻辑强度(strength)模型

目录 1.Verilog提供多级逻辑强度。2.基本单元强度说明语法3.信号强度值系统4.Verilog多种强度决断 微信公众号获取更多FPGA相关源码&#xff1a; 1.Verilog提供多级逻辑强度。 逻辑强度模型决定信号组合值是可知还是未知的&#xff0c;以更精确的描述硬件的行为。下面这些情…