Android可折叠设备完全指南:展开未来

2023-12-24 11:04

本文主要是介绍Android可折叠设备完全指南:展开未来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android可折叠设备完全指南:展开未来

探索如何使用Android Jetpack组件折叠和展开设备。
近年来,科技界见证了可折叠设备的革命性趋势。这些设备融合了便携性和功能性的创新特点,使用户能够在不同的形态之间无缝切换。在本博客中,我们将深入探讨Android可折叠设备的世界,探索它们独特的特点、设计考虑因素,以及开发人员如何为这些设备创建优化的应用程序。

可折叠设备的兴起

预计2023年可折叠手机出货量将达到2140万台,比2022年的1420万台增长50%。到2027年,这个数字将超过4810万台,年复合增长率为27.6%。尽管增长迅速,可折叠智能手机仍属于高端市场,平均售价预计在2023年下降6.8%。各公司正在投资软硬件改进,推动持续采用。

可折叠设备与传统智能手机和平板电脑完全不同。它们具有可以折叠和展开的柔性屏幕,可以实现多种使用场景。随着Android生态系统的扩展以支持这些设备,开发人员面临着激动人心的新挑战和机遇。


为可折叠设备进行设计

设计可折叠设备需要重新构思用户界面。随着设备的折叠和展开,应用程序需要优雅地适应不同的屏幕尺寸和方向。为了实现这一点,开发人员必须利用Android内置的可折叠和多窗口环境支持。

关键设计考虑因素

  1. 多窗口支持:Android允许应用程序在多个窗口中同时运行。开发人员必须确保他们的应用程序可以在分屏和自由形式模式下有效使用。您可以查阅并遵循官方指南以支持此功能。

https://source.android.com/docs/core/display/multi_display/multi-resume

  1. 自适应布局:采用ConstraintLayout和其他布局管理工具可以帮助创建动态界面,根据不同的屏幕尺寸和方向进行调整。您可以按照这些开发人员指南来调整布局。

  1. Flex Mode: 可折叠设备通常支持“弯折模式”,屏幕部分折叠。应用程序应该针对此模式进行优化,使其布局适应可用的屏幕空间。

  2. 连续性:用户在从一个形态转换到另一个形态时应该体验到无缝的连续性。在这些转换过程中,数据和状态应该得到保留。要了解更多关于管理应用程序状态和连续性的信息,请参阅保存UI状态。

可折叠设备的开发策略

开发人员必须了解为可折叠设备引入的新功能和API,以创建充分利用其功能的应用程序。

  1. 多重恢复:可折叠设备允许多个应用程序在分屏模式下同时活动。开发人员应该按照这些指南确保他们的应用程序正确处理多重恢复的情况。

https://source.android.com/docs/core/display/multi_display/multi-resume

  1. 窗口管理:Android提供了用于管理多个窗口的API,包括调整大小、定位和焦点设置。开发人员应该熟悉这些API,以获得最佳的应用程序行为。

https://developer.android.com/topic/arc/window-management

  1. 显示切口和凹口:可折叠设备可能具有独特的屏幕配置。开发人员应该调整他们的用户界面,以适应显示切口和凹口。

优化现有应用程序

为可折叠设备调整现有应用程序涉及设计、布局和编码的调整。优先考虑核心功能,并在如何充分利用可折叠设备功能方面做出战略决策。

拥抱移动计算的未来

随着可折叠设备的普及,开发人员有机会塑造移动计算的未来。通过了解这些设备提供的独特挑战和可能性,开发人员可以创建出提供用户无与伦比的灵活性和功能性的应用程序。

以下是一个示例,演示如何在包含常用列表视图和详细视图屏幕的单个活动中处理可折叠和非可折叠设备:

Jetpack WindowManager库帮助应用程序开发人员支持新的设备形态,并在旧版和新版平台上提供各种WindowManager功能的公共API。将以下内容添加到您的app/build.gradle文件中。此设置增强了Android应用程序中的窗口管理和生命周期处理。

(Jetpack WindowManager)
https://developer.android.com/jetpack/androidx/releases/window

dependencies {//need to get updates from window manager about layouts and screenimplementation('androidx.window:window-java:1.2.0')implementation('androidx.window:window-rxjava2:1.2.0')// need to use it for lifecycleScope to collect windowLayoutInfoimplementation('androidx.lifecycle:lifecycle-runtime-ktx:2.6.2')}

您可以在lifecycleScope中观察WindowInfoTracker,并相应地更新您的用户界面。

//MainActivity.kt
lifecycleScope.launch(Dispatchers.Main) {lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {WindowInfoTracker.getOrCreate(this@MainActivity).windowLayoutInfo(this@MainActivity).collect { updateUI(it) }}}

在这里,我们从WindowLayoutInfo中获取displayFeatures,并相应地展开或折叠。

//MainActivity.ktprivate fun updateUI(windowLayoutInfo: WindowLayoutInfo) {val displayFeature = windowLayoutInfo.displayFeaturesvar isUnFold = falsefor (feature in displayFeature) {if (feature is FoldingFeature) {val foldPos = feature.bounds.rightval foldWidth = feature.bounds.left - foldPosexpandLayout(foldPos, foldWidth)isUnFold = true}}if (!isUnFold) collapseLayout()}

在这个方法中,我们通过折叠点的帮助启用了详细的屏幕布局。

//MainActivity.kt
private fun expandLayout(guidelinePosition: Int, foldWidth: Int) {val listViewFragmentId = R.id.listViewFragmentContainerval detailViewFragmentId = R.id.listViewDetailFragmentContainerval landscapeLayout = ConstraintSet()landscapeLayout.apply {clone(binding.constraintLayout)setMargin(detailViewFragmentId, ConstraintSet.START, foldWidth)applyTo(binding.constraintLayout)}binding.guideline.setGuidelineEnd(guidelinePosition)listViewFragment.setDetailViewContainerId(detailViewFragmentId)fragmentManager.beginTransaction().replace(listViewFragmentId, listViewFragment).replace(detailViewFragmentId, detailViewFragment).commit()}

这个方法将设置初始布局,并为列表屏幕布局设置用户界面。

//MainActivity.kt
private fun collapseLayout() {val listViewFragmentId = R.id.listViewFragmentContainerbinding.guideline.setGuidelineEnd(0)binding.listViewDetailFragmentContainer.visibility = View.GONElistViewFragment.setDetailViewContainerId(listViewFragmentId)fragmentManager.beginTransaction().replace(listViewFragmentId, listViewFragment).commit()
}

输出

当我们没有添加WindowInfoTracker并且设备展开时的列表屏幕:

这是当我们添加了WindowInfoTracker并且设备展开时的列表屏幕。它将同时显示详细屏幕:

结论

Android对可折叠设备的支持得到了改善,专注于响应式设计。这使得应用程序能够适应不同的显示尺寸,给开发人员带来了挑战和机会。Android提供了创建响应式布局的资源。

参考

https://developer.android.com/guide/topics/large-screens/multi-window-support
https://developer.android.com/guide/topics/resources/runtime-changes
https://developer.android.com/topic/libraries/architecture/saving-states

这篇关于Android可折叠设备完全指南:展开未来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/531559

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

JavaScript错误处理避坑指南

《JavaScript错误处理避坑指南》JavaScript错误处理是编程过程中不可避免的部分,它涉及到识别、捕获和响应代码运行时可能出现的问题,本文将详细给大家介绍一下JavaScript错误处理的... 目录一、错误类型:三大“杀手”与应对策略1. 语法错误(SyntaxError)2. 运行时错误(R

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和