Android SlidingPaneLayout实践

news/2024/4/26 21:17:15/文章来源:https://blog.csdn.net/u011897062/article/details/129254565

Android SlidingPaneLayout实践

可折叠设备在这里这一事实是无法回避的。在应用程序开发方面,它们带来了一些新的挑战。其中之一是可折叠设备的外形尺寸会根据折叠状态而变化。Android在设计上支持不同的外形尺寸,因此这很容易处理。但是,有一个新的Jetpack库可以使事情变得更容易:
【SlidingPaneLayout】(https://developer.android.com/jetpack/androidx/releases/slidingpanelayout)
主要用例是不同的屏幕尺寸需要不同的用户体验。这方面的经典示例是列表/详细信息界面。列表和详细信息窗格在较大的显示器上并排显示。但列表窗格在较小的显示器上全屏显示。单击列表项后,将详细信息窗格全屏显示。通常,我们将列表和详细信息窗格实现为 s,然后具有根据显示大小更改的主布局。SlidingPaneLayoutFragment

SlidingPaneLayout提供了大致相同的功能,但为我们完成了大部分繁重的工作。

实现

我们需要做的第一件事是在我们的项目中包含依赖项:

dependencies {implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0-alpha01"
}

现在我们可以创建布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.slidingpanelayout.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="@dimen/list_width"android:layout_height="match_parent"android:layout_gravity="start" /><androidx.fragment.app.FragmentContainerViewandroid:id="@+id/nav_host_fragment"android:name="androidx.navigation.fragment.NavHostFragment"android:layout_width="@dimen/item_width"android:layout_height="match_parent"android:layout_weight="1"app:defaultNavHost="true"app:navGraph="@navigation/item_navigation" /></androidx.slidingpanelayout.widget.SlidingPaneLayout>

在这里,我们使用 实现列表窗格,并将详细信息窗格实现为 .RecyclerViewNavHostFragment

这里的关键是宽度值。这些定义了全屏显示或并排显示两个窗格之间的拆分点。如果显示的宽度不足以容纳两个宽度,则列表窗格将全屏显示。点击列表项将使详细信息窗格全屏显示。

但是,如果显示的宽度足以包含两个窗格,则它们将并排显示。在这种情况下,属性可能变得很重要。此处,详细信息窗格的权重为 。如果没有其他约束,则在确定列表窗格的大小后,详细信息窗格将填充剩余空间。但是,在某些可折叠设备上,两个窗格之间的边界可能是显示器的折叠线。layout_weight1

片段代码对此完全无关 - 它全部由 .尽管在某些情况下可能需要以编程方式控制这一点。 如有必要,可以通过编程方式轻松控制实现。SlidingPaneLayoutSlidingPaneLayoutOpeneable

结果

我在三星Z Fold2上对此进行了测试,它运行得非常流畅。但是,我无法从该设备捕获视频,因此不得不即兴创作。此捕获来自“7.6 Fold-in with outer display”模拟器实例,该实例类似于三星:
fold device state/close and open

在折叠和展开状态之间转换时,会出现一点布局故障,反之亦然。但是,这并没有在实际设备上发生。不过,它确实很好地显示了不同的UX模型。

思考

SlidingPaneLayout功能强大且易于使用。可折叠设备背后的概念也给我留下了深刻的印象,而且技术正在成熟。然而,我对三星Z Fold2不太着迷。该设备的制造质量非常好,尽管只有时间才能证明显示器的铰链部分的磨损程度。我遇到的问题是折叠和展开显示器的纵横比。

折叠后,显示屏非常高,但不是很宽–816 x 2260像素–大约1:3的纵横比。很少有应用程序真正能够很好地应对这种情况,尤其是最终将列压在一起的第三方启动器应用程序。虽然应用程序有责任适应显示,但这感觉像是一个特别尴尬的纵横比,许多应用程序根本无法很好地应对它。

同样,展开的显示器也是一个不寻常的纵横比。它是 1768 x 2208 像素——大约 1:1.25。这离方不远,再一次,这是一个非常罕见的纵横比,因此应用程序无法很好地应对它。这是BBC天气应用程序:
天气应用折叠布局问题
从表面上看,这看起来还可以。仔细观察,Hemel Hempstead 中的字幕被裁剪(字母P被裁剪)是一个问题。此外,“下一个小时”也跑到它上面的文本中。

怎么了?

这里的问题是,从技术上讲,这是一个纵向显示器,因为它的高度大于宽度。但它并没有那么高。因此,为纵向显示器设计的布局不适用于近方形显示器。

正如我已经提到的,应用程序可以改进自己的布局。但这里的硬件选择意味着应用程序需要支持新的纵横比。这将导致支持此类设备所需的开发和 QA 工作增加。可折叠设备仍然有些昂贵,因此不会大量出货。许多应用程序开发人员会觉得额外的努力是没有道理的。这可能会让潜在买家望而却步。

虽然我已经偏离了这篇文章的主题,但我确实觉得值得一提。感觉设备制造商需要做出更多的努力来符合更合理的纵横比,否则可能会破坏许多应用程序UI。

结论

SlidingPaneLayout是一个非常易于使用的工具,用于处理需要不同显示尺寸不同行为的多个窗格 UI。虽然我在这里重点介绍了可折叠设备,但在使应用程序在多窗口环境中表现良好时,它也非常有用。如果应用未获取整个屏幕,可以确保其行为适应其窗口大小的变化SlidingPaneLayout
文章源码获取地址
{SlidingPaneLayout}(https://github.com/StylingAndroid/SlidingPaneLayout)

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

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

相关文章

软件测试面试题 —— 整理与解析(2)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…

零基础入门网络安全,看这一篇就够了!

前景 很多零基础朋友开始将网络安全作为发展的大方向&#xff0c;的确&#xff0c;现如今网络安全已经成为了一个新的就业风口&#xff0c;不仅大学里开设相关学科&#xff0c;连市场上也开始大量招人。 那么网络安全到底前景如何&#xff1f;大致从市场规模、政策扶持、就业…

高精度真空度程序控制在真空解冻过程中的应用

摘要&#xff1a;为了解决目前各种真空冷冻过程中存在的真空压力还是人工手动调节&#xff0c;无法进行可编程准确自动控制的问题&#xff0c;本文提出了具体解决方案。解决方案的基本原理是根据动态平衡法&#xff0c;具体实现是依据不同的真空压力设定值分别采用电动针阀调节…

华为OD机试题,用 Java 解【斗地主】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

第13天-仓储服务(仓库管理,采购管理 ,SPU规格维护)

1.仓储服务开发配置 1.1.加入到Nacos注册中心 spring:application:name: gmall-warecloud:nacos:discovery:server-addr: 192.168.139.10:8848namespace: 36854647-e68c-409b-9233-708a2d41702c1.2.配置网关路由 spring:cloud:gateway:routes:- id: ware_routeuri: lb://gmal…

TOSCA自动化测试工具

TOSCA由德国公司Tricentis研发&#xff0c;提供英文和德语两种版本。 目前他们的网上培训课程大约是2000一套&#xff0c;从初级到高级&#xff0c;从工程师到BA&#xff0c;有技术&#xff0c;也有测试管理。 TOSCA的思想是&#xff0c;不用会编程的测试人员可以直接上手自动…

GitHub 下载超过 28W 次的 Java 面试题库来袭,面面俱到太全了

“金三银四”、“金九银十” 一直被称为是跳槽的旺季&#xff0c;最近也有不少小伙伴找我咨询一些面试相关的问题。刚好小编最近获得一份收费 Java 面试题库&#xff01; 这些面试题都是互联网大厂真实流出的面试内容&#xff0c;每个问题都附带完整详细的答案&#xff0c;不像…

值得关注!可控生成!近期diffusion图像生成进展!

猜您喜欢&#xff1a;深入浅出stable diffusion&#xff1a;AI作画技术背后的潜在扩散模型论文解读戳我&#xff0c;查看GAN的系列专辑~&#xff01;一顿午饭外卖&#xff0c;成为CV视觉的前沿弄潮儿&#xff01;最新最全100篇汇总&#xff01;生成扩散模型Diffusion ModelsECC…

2023 Java 分布式 面试 大纲

前段时间 &#xff0c;公司部门的HR找到我&#xff0c;说来了几份简历 &#xff0c;都是三年所有的开发 让我面一下&#xff0c; HR那边 一面核对了基本的信息 二面技术&#xff0c;是由我来接手&#xff0c;然后问了 一些分布式的问题 &#xff0c;大部分都是在围绕着SpringCl…

linux基本功系列之free命令实战

文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出总结前言 大家好&#xff0c;又见面了…

【双U网络:传感器间自监督:全色锐化】

W-NetPan: Double-U network for inter-sensor self-supervised pan-sharpening &#xff08;W-NetPan&#xff1a;用于传感器间自监督全色锐化的双U网络&#xff09; 由于遥感数据的提供日益增多&#xff0c;可以通过全色锐化方法来处理空间-光谱限制。然而&#xff0c;融合…

【java基础】反射详解

文章目录基本介绍Class类Filed类Method类Constructor类获取Annotation信息Modify工具类实例运用(修改字符串值)总结基本介绍 反射库&#xff08;reflection library)提供了一个丰富且精巧的工具集&#xff0c;可以用来编写能够动态操纵Java代码的程序。使用反射&#xff0c;Ja…

linux-中断下半部

引用preempt宋宝华&#xff1a; 是谁关闭了Linux抢占&#xff0c;而抢占又关闭了谁&#xff1f;Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十&#xff09;内核抢占实现(preempt)Linux中的preempt_count - 知乎 (zhihu.com)linux 中断子系统…

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

测试不止是点点点 我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业摸爬滚打5年&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没&#xff1f; 和IT圈外的同学、朋友聊起自己的工作&#xff0c;往往一说自己是测试&#xff0c;无形中也会被大家…

再度盈利,搜狐稳了?

2016年在宣布要用3年时间回归互联网舞台中心之后&#xff0c;很长一段时间内张朝阳积极活跃在各种社交媒体上&#xff0c;完全是一派“积极出山”的姿态。而后畅游从美股退市&#xff0c;搜狗“卖身”腾讯&#xff0c;一系列的收缩动作又似乎是在逐渐远离喧嚣。而在最近三年&am…

华为OD机试模拟题 用 C++ 实现 - 自动曝光(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明自动曝光题目输入输出描述示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出࿰

SRC挖掘之Access验证校验的漏洞挖掘

漏洞已修复&#xff0c;感觉某大佬的知识分享 任意用户密码重置->可获取全校师生个人min感信息 开局就是信息收集 对于挖掘edu的信息收集 1.可尝试谷歌搜索语法&#xff0c;获取学号信息 1. 旁站的渗透获取 2. 学校的贴吧获取(大部分都是本校学生) 当然我就是闲着蛋疼,进了…

让马斯克反悔的毫米波雷达,被国产雷达头部厂商木牛科技迭代到了5D时代

近日&#xff0c;特斯拉或将在其HW4.0硬件系统配置一枚高精度4D毫米波雷达的消息在外网刷屏。据分析&#xff0c;“纯视觉”信仰者马斯克之所以做出这样的决定&#xff0c;一方面是减配了雷达的特斯拉自动驾驶&#xff0c;表现不尽如人意&#xff1b;另一方面也跟毫米波雷达的技…

有趣的HTML实例(十四) 窗边风景动画(css+js)

不要憎恨你的敌人&#xff0c;那会影响你的判断力。 ——《教父》 目录 一、前言 二、往期作品回顾 三、作品介绍 四、本期代码介绍 五、效果显示 六、编码实现 index.html style.css script.js 七、获取源码 公众号获取源码 获取源码&#xff1f;私信&#xff1…

Javascript的API基本内容(四)

一、日期对象 获取时间戳的方法&#xff0c;分别为 getTime 和 Date.now 和 new Date() // 1. 实例化const date new Date()// 2. 获取时间戳console.log(date.getTime()) // 还有一种获取时间戳的方法console.log(new Date())// 还有一种获取时间戳的方法console.log(Date.n…