共计 10620 个字符,预计需要花费 27 分钟才能阅读完成。
随着智能终端硬件的一直变革,大尺寸设施的品种越来越丰盛,比方手机、折叠屏设施、平板电脑、ChromeBook、外接显示器的 ChromeBox 和集成屏幕的 Chromebase 等。Google 团队正在将更多研发精力投入到 Android 框架、Jetpack 和 Chrome 操作系统中。
△ Android 12L 和 Jetpack 减少了新的 API 和性能,使您的 APP 外观更精美,性能更弱小。
请持续浏览,查看 Android 零碎和 Chrome OS 对大屏幕设施的反对的更新!
如果您更喜爱通过视频理解此内容,请在此处查看:
https://www.bilibili.com/vide…
△ Android 与 Chrome OS 中针对大屏幕设施的更新
Android 12L
如下图所示数据能够发现,用户对更大屏幕空间的需要在一直增长,仅 2020 年一年 Android 平板电脑的销量减少 1 亿台,Chrome 操作系统减少超 92%。目前在应用的大屏幕 Android 设施超过 2.5 亿,所以这就须要利用针对这类设施进行相应的适配。为了可能适应日益增长的设施数量和用户需要,咱们推出了针对大屏幕设施的 Android 12L (下文简称 12L)。
△ 大屏幕设施正在逐渐成为支流 1 亿新增 Android 平板电脑数据起源: 2021 年第二季度: IDC 单季度集体计算设施跟踪
始终以来,咱们都与开发者严密单干,及时理解他们针对大屏幕开发的需要以及上游设施制造商的实时动向,并行改良性能和 API,这些更新将在 2022 年初落地,使 Android 12 可能更好地运行在这些大屏幕设施上。12L 蕴含多个专门针对开发者的优化,包含更杰出的多任务处理,从新设计的外观以充分利用屏幕空间,同时还减少了兼容模式,以确保在小屏幕手机上也能够失常运行。
多任务处理
从 Android 12 开始多任务处理曾经成为日常操作,所有利用均能够在多窗口模式下运行。然而须要留神的是利用可能以分屏模式运行或以窗口模式呈现在另一个利用旁边。
在以下场景中尤其要留神:
- 自行渲染界面元素或须要特定的窗口尺寸;
- 利用须要拜访独占硬件设施,比方摄像头和麦克风。
多窗口模式
△ 多窗口反对相较之前更易拜访
为了反对多任务处理,Android 12L 更新了界面,包含通过改良的供给用切换的任务栏。咱们都晓得过来用户要进入分屏模式的操作比拟繁冗。全新的任务栏简化了利用之间的快捷切换形式,并且能够轻松返回主屏幕。
导航按钮
△ 三按钮导航相较之前更易拜访
在屏幕较大的设施上,任务栏能够很不便地将利用转为分屏模式或者多窗口模式。这是因为所有利用无论是否申明尺寸可切换,都能够在分屏模式或者独自窗口下运行,所以有必要更新您的利用以适配尺寸变动,同时防止利用重启或者进入兼容模式。任务栏还将三按钮式导航栏移至屏幕一侧,以不便用户手持大屏幕设施操作。
零碎界面
△ 零碎界面 — 现代化的外观和质感
Android 12L 还带来了多项零碎界面相干的用户界面更新。包含优化主屏幕布局,大幅调整告诉外观和格调,退出了弹出窗口,使 PIN 码输出更加简略。您无需采取任何操作就能够在利用中主动采纳新的零碎外观。此外,咱们还在更新设置、设置向导等零碎利用,从而更好地利用屏幕空间。
改良的任务栏
△ 优化体验后的任务栏 — 为了更好的利用切换体验
为了可能晋升利用切换的体验,咱们优化了任务栏。用户能够疾速实现利用切换、回到主屏幕等操作。在屏幕较大的设施上,任务栏能够拖动利用进入分屏和多窗口模式。
兼容模式
△ 兼容模式 — 稳定性和视觉晋升
如果您的利用锁定为横向或者纵向模式,并且无奈调整大小,那么当用户进入分屏、关上折叠设施,亦或是在 ChromeOS 那样的多窗口环境下,利用也能以兼容模式显示。从而确保利用外观和性能可能依照最后的成果出现。
咱们正在更新性能和兼容模式下的款式和出现成果,尽管这些能够使用户持续应用那些不可扭转尺寸的利用,并且也可能和零碎相符合,然而依然无奈提供现实的用户体验,而是否对利用做出优化的决定权在您手上。
Play 商店更新
△ Play 商店更新 — 展现适配大屏幕的利用
咱们还针对 Play 商店做出了一些改良,帮忙用户找到适宜大屏幕的最佳利用。
首先,咱们正在将大屏幕设施利用的评分和评论性能独立进去;其次,咱们正在针对利用的可变尺寸的性能和大屏幕上的布局方面,优化咱们的质量检验流程;最初,咱们将对输出的反对以及其余针对大屏幕的性能进行钻研。通过这些路径,咱们就能为用户挑选出可能面向他们的设施提供最佳体验的利用。咱们打算在 2022 年推出这些改良届时大家能够更加具体地理解这部分内容。
如须要更多材料,请参阅如下文章:
- 大屏幕利用品质指南
- 为用户和开发者提供更好的评分和评估
- 用更好的业务模式满足开发者们的需要
Android 12L 的可折叠屏模拟器
△ Android 12L/ 可折叠模拟器 developer.android.google.cn/12L
12L 性能投放蕴含全新 API 以及新的 SDK 级别,即 32 级,不便您疾速定位新性能。请留神,Play 商店每年减少指标 SDK 的要求,仅实用于 Android 12,即 SDK 31,不会强制要求您降级为 32。
明天就开始测试这些新性能和 API 吧,获取 Android 12L 开发者预览版,让您的利用筹备好迎接行将公布的公开版本。您也能在 Android Studio 模拟器 中应用 12L 零碎映像,尝试分屏、折叠和旋转事件。确保利用在整个用户应用过程中都能放弃好看。
很快大家就能应用 Lenovo P12 Pro、Samsung Galaxy Z Fold 3 测试这些性能。12L 性能的更新振奋人心,咱们也期待着在今后的 Android 版本中退出更丰盛的性能以及对大屏幕设施更多的反对,咱们将持续致力让 Android 成为更好的操作系统,为用户和开发者提供更优质的服务。
Jetpack WindowManager
Jetpack WindowManager 是提供向后兼容 API 的库,可能适配窗口规格和尺寸,还能提供对于显示性能详细信息,比方折叠、铰链和设施配置。本文将会解说库中可用的稳固 API,还会介绍以后和将来版本中的一些全新试验工具从而让您的利用在大屏幕上显得好看。该库采纳了 12L 的最新性能,但也兼容之前平台版本,低至 API 级别 14。
WindowMetrics
△ 为任意屏幕尺寸构建 Android 界面
首先介绍 WindowMetrics。Android 11 引入了一套新的 WindowManager API,可能给出利用以后运行窗口的精确测量数据。在大屏幕设施上,因为用户对于分屏和其余多窗口模式的应用频率越来越高,您的利用很可能不会占据整个屏幕。在 Samsung Galaxy Z Fold 系列手机中,咱们发现其在分屏使用率上高达七倍于其它手机的景象。另一个例子是当大屏幕手机处于不同方向时,窗口带有黑边。使利用可能在尺寸上齐全可变是十分重要的,咱们会大篇幅来探讨这个主题。
那么如何确定 Activity 的尺寸呢?
class MyActivity : Activity() {override fun onConfigurationChanged(newConfig: Configuration) {super.onConfigurationChanged(newConfig)
val windowMetrics = WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(this)
}
}
WindowMetrics API 能够在所有可能的状态下返回窗口的精确像素尺寸,而且向下兼容至 SDK 级别 14。如果用户扩大了利用的显示,它还会提醒您可配置的最大尺寸,以便开发者抉择适合的资源提前加载。请记住,WindowMetrics 可在运行时更改,因而倡议值更新机会为最后创立 Activity 的时候以及应用 WindowMetricsCalculator 更改配置的时候。请不要应用曾经弃用的显示相干的 API,比方 “getRealMetrics” 或者 “getRealSize”,否则您可能会失去异样的尺寸值。
WindowSizeClasses
在所有设施类型上都可能将利用直观出现给用户的另一个要害因素是提供不同的布局。咱们从大家的反馈中理解到在纷繁复杂的设施生态系统中,可能分明地晓得针对哪种屏幕尺寸进行开发是十分艰难的。
△ Jetpack WindowManager 中的窗口尺寸类
当初 Jetpack 减少了 WindowSize 类,使得这一艰难迎刃而解。该性能引入了独具特色的布局断点 (layout breakpoint) 能够帮忙您理解如何适配界面。当须要针对不同的设施类型抉择适合的布局时或者在多窗口模式下须要响应窗口的变动时,就须要用到 WindowSize 类。
之前在竖屏模式下,用户大多数工夫仅仅操作一个利用,然而平板电脑通常是横屏模式。而对于可折叠设施和不同的多窗口模式,利用常常须要在单次会话中将窗口尺寸变大或者变小。所以须要满足尽量多的场景。如果您心愿理解 WindowManager Jetpack 1.1 相干性能,请查阅咱们的推文《为任意屏幕尺寸构建 Android 界面》。
可折叠屏幕
△ 可折叠屏幕
其中的翻新后劲很大,特地是针对可折叠设施。随着市场上此类设施数量逐步减少,您能够更进一步,不仅使利用可能兼容大屏幕,而且在利用正在运行的状况下,当用户折叠或开展设施时,利用可能适配设施不同的状态。
反对不同的模式可能为利用带来新的交互方式以及新的应用体验。例如,当初的可折叠设施常搁置于桌面应用,非常适合观看视频或接听免提电话。设施的搁置形式使屏幕的一部分处于舒服的观看角度,而屏幕的另一部分则放在安稳的台面上,使其非常适合各种交互元素。
FoldingFeature
△ FoldingFeature
咱们来看看 API 库能为您提供哪些帮忙。您能够应用 FoldingFeature 判断设施的姿势。该类用于监测可折叠设施的状态,并且应用特色类型、屏幕方向和状态更新界面在必要时更新周边的界面。
val windowInfoRepo = windowInfoRepository()
lifecycleScope.launch(Dispatchers.Main) {lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
windowInfoRepo.windowLayoutInfo
.collect { newLayoutInfo ->
updateCurrentState(newLayoutInfo)
}
}
}
有两种可能的状态: 平开与半开。平开状态下屏幕齐全开展成立体,但某些状况下屏幕仍然被铰链宰割而并非间断整体。而半开状态下,窗口始终蕴含至多两个逻辑区。性能布局信息通过 WindowInfoRepository 提供。要开始或进行监听事件,可应用生命周期作用域,在 Activity 可见时进行追踪。之后,您能够应用 windowLayoutInfo 对象中可用的信息更新利用布局。
private fun isTabletopPosture(foldFeature: FoldingFeature) =
foldFeature.state == FoldingFeature.State.HALF_OPENED &&
foldFeature.orientation == FoldingFeature.Orientation.HORIZONTAL
FoldingFeature 蕴含铰链屏幕方向和状态等信息。可应用这些值来判断设施是处于桌面模式,还是铰链平放的半开模式。如需理解更多详情,请查阅文档理解 折叠设施构建的残缺指南。
测试 WindowManager
为了长期保持此类新型布局简略易用,咱们还在 JetpackWindowManager 退出了新的测试 API。还在库中引入专门的窗口测试模块。
val testFeature = FoldingFeature(
activity: Activity,
center: Int = -1,
size: Int = 0,
state: State = HALF_OPENED,
orientation: Orientation = VERTICAL,
)
val expected = WindowLayoutInfo(listOf(testFeature))
这个示例展现了创立次要类相干的测试实例。留神 Activity 是 FoldingFeature 函数的惟一参数没有默认值。以后测试 FoldingFeature 的默认配置屏幕两头程度布局为半开状态。
private val activityRule = ActivityScenarioRule(TestActivity:class.java)
private val publisherRule = WindowLayoutInfoPublisherRule()
@get:Rule
public val testRule: TestRule
init {testRule = RuleChain.outerRule(publisherRule).around(activityRule)
}
WindowLayoutInfoPublisherRule 可用于测试界面以及界面如何响应 FoldingFeatures。能够将其关联至 ActivityScenarioRule。然而利用上架规定不能齐全代替在设施上进行的端到端测试。比方,实在设施可能会更新屏幕方向窗口布局信息。但如果应用 publisherRule,就必须自行更新窗口尺寸和窗口布局信息。
@Test
public fun testMyFeature() {val feature = WindowLayoutInfo(emptyList())
publisherRule.overrideWindowLayoutInfo(feature)
activityRule.scenario.onActivity { activity ->
// 利用相干测试
}
}
测试规定设置实现后,可应用 overrideWindowLayoutInfo 办法替换以后布局信息对象。
Activity 嵌套
咱们意识到转换现有旧版代码库使其反对大屏幕可能困难重重。对于长期以来针对繁多屏幕进行开发应用 Activity 的利用,通过 Fragments 或其余工具切换为多窗格布局可能须要大幅重构,耗费大量团队资源。为了使转换更加容易,咱们推出了 ActivityEmbedding,这是一套 WindowManager Jetpack 功能集,可用于在目前支流大屏幕设施端灵便组织 Activity 窗口。
并排显示的 Activity
△ Jetpack WindowManager 中的 Activity embedding
它的初版界面实现专一于通过在多列布局中并排显示 Activity 从而充分利用大屏幕空间。例如,您能够通过独立的 Activity 显示这些列表和详细信息,不过您可能心愿在大屏幕上显示这些内容。尽管我建议您以繁多 Activity 的形式重构利用,不过能了解,这么做的老本十分高。该性能让您可能利用现有利用构造来优化大屏幕布局。而且最令人兴奋的是采纳该性能只需稍微调整代码,某些状况下代码甚至无需调整。
△ 小屏幕和大屏幕
咱们来具体看一下。该性能在设计之初就思考到兼容性。基于可用屏幕空间以及您提供的设置,库能够主动抉择适合的展现类型,从而防止了分支利用内导航代码就能解决不同局部中的大小屏幕。该库还反对运行时屏幕和窗口尺寸变更,如果用户折叠或开展设施或在多窗口模式下从新调整窗口大小,展现将会自动更新,您无需额定操作。
Activity 堆栈
△ Activity 堆栈
咱们还会遵循利用中 Activity 的现有排序,辨认每个分块中的主副、两个容器或 Activity 堆栈。副容器始终位于主容器之上。如果屏幕空间较小 Activity 堆栈还与平时一样;但如果空间足够,两个堆栈就能够并排显示。
上面通过示例展示如果副容器中有多个 Activity,会产生什么情况?
△ Activity 堆栈
他们会主动呈现在启动时的雷同边界之内。现有的 Activity 启动和预期分辨率规定同样实用。
△ 多重深度层级
库还反对多层次导航,创立多个分块,最多显示两个窗格。开启新窗格时,之前创立的窗格将移至屏幕外。此示例中,如果现有分块显示 Activity A 和 B,而您须要将新的 Activity C 在一侧显示,则会创立第二个分块显示 B 和 C。同样,容器的 Z-Order 仍然认为在顶部。
△ 屏幕尺寸变动
这样的程序意味着用户敞开可折叠设施,持续应用利用时您能够从新调整容器的大小和地位放弃 Activity 的程序。副堆栈中的顶部 Activity 会主动扩大,但如果用户开展设施,可随时再次并排显示。
△ 占位符
这是另一个不同的用例,咱们称之为「占位符」。有时利用会在主页显示顶级导航列表,用户做出抉择前没有辅助内容可显示。然而,为了充分利用可用空间,也出于一致性思考,应该在利用开启后立即显示分块,此时辅助内容大部分留空。同时,如果在较小的屏幕上开启利用,并且在设施折叠之后,咱们不心愿在顶部显示空白页。
咱们在库中增加了一个专门的选项来反对占位符的应用场景,来一起看一下如何在利用中集成该性能。
分块规定
<SplitPairRule>
<SplitPairFilter
window:primaryActivityName=”.ActivityA”window:secondaryActivityName=”.AcitvityB”/>
</SplitPairRule>
首先,在构建文件中申明库依赖;而后,在 assets 中创立一个 XML 文件并提供规定定义: 哪些 Activity 应该分块,以及分块的属性。
此示例中,当 B 在 A 之后被关上的时候,我心愿把 Activity A 和 B 放入分块中。为了实现这一点,我应用默认配置增加了一个独自的分块配对规定,再退出一个过滤条件用于匹配 Activity 组件名称。Activity B 从 A 中启动后,会核查并匹配过滤器,并且库会主动创立新的分块。
咱们针对不同的场景提供了不同类型的规定,从而给您肯定的灵活性。您能够在咱们的文档中找到更多的相干信息,另外,也能够应用运行时 API 按需增加或移除规定。
配置
接下来,咱们须要将规定定义告知库。此示例中,咱们应用的是 Jetpack AppStartup 库。此示例中,在其它上传组件和 Activity 启动之前,咱们应用 Jetpack AppStartup 库进行初始化。要实现这一点,咱们须要在构建文件中增加库依赖,并且在 AndroidManifest 中增加以下条目。这里咱们指定所应用的 initializer 类。
<provider
android:name=”androidx.startup.InitializationProvider”android:authorities=”${applicationId}.androidx-startup”android:exported=”false”tools:node=”merge”>
<meta-data
android:name=”example.SplitInitializer”android:value=”androidx.startup”/>
</provider>
最初,增加 initializer 类的实现。如果您曾经在利用中应用 AppStartup,那么应该比拟相熟这样的构造。
class ExampleWindowInitializer : Initializer<SplitController> {override fun create(context: Context): SplitController {SplitController.initialize(context, R.xml.main_split_config)
return SplitController.getInstance(context)
}
override fun dependencies(): List<Class<out Initializer<*>>> {return emptyList()
}
}
要设置规定,可向 SplitController.initialize 提供 XML 资源 ID 和定义。
功败垂成!库将会追踪在您的代码库中不同地位启动的 Activity,查看所用到的 intent 以及启动这些 Intent 的 Activity,如果找到匹配规定,会创立新的分块,并由库进行治理。
在最新版的 WindowManager Jetpack 扩大的大屏幕设施上会提供该性能。
当初就能在 12L 模拟器中应用,而且很快就能在 Samsung GalaxyZ Fold 3 等实在设施上找到它。在不反对该性能的设施上显示方式还会和之前一样,Activity 依然会重叠显示,相互齐全笼罩,因而无需放心尚未反对的设施会呈现显示异样。
如果您须要通晓该性能是否可用,可应用专用的运行时 API。咱们也在尝试其余与多屏显示设施相干的交互方式。具体实现代码,请参阅 WindowManager Jetpack Demo。
后侧屏显示模式
△ 后侧屏幕显示模式
一个酷炫的例子是后侧屏幕显示模式可在设施开展状态下,应用高质量主摄像头自拍的同时显示自拍预览画面。咱们正在开发一套 API 反对此利用场景。您可在今后的版本的实验性 WindowManager Jetpack API 找到上述性能。
Chrome 操作系统
△ Chrome OS 优化
多年来,Chrome 操作系统让用户可能在大屏幕设施上装置和运行 Android 利用。
△ 画中画
最近,咱们针对 Android 利用体验进行了多方面改良,比方晋升画中画反对、退出低提早触控笔库,以及丑化那些并非针对大屏幕设备设计的利用的界面。当初画中画在 Chrome 操作系统中界面更精美、运行更晦涩。应用规范 Android 画中画 API 无需额定投入,即可取得最新外观和性能。
接下来咱们来疾速浏览一下这些 API。首先,在清单文件中指出画中画反对:
android:supportsPictureInPicture=”true”
而后通过 enterPictureInPictureMode 启动它:
pipButton.setOnClickListener {
enterPictureInPictureMode(new PictureInPictureParams.Builder().build())
}
您还能够应用 onUserLeaveHint 实现 Activity 在被用户置入后盾时,主动进入画中画模式等性能:
override fun onUserLeaveHint() {
enterPictureInPictureMode(new PictureInPictureParams.Builder().build())
}
请留神,此模式下可能须要调整界面。如需进行调整,请找到 onPictureInPictureModeChanged 回调,并按需做出相应批改:
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration) {if (isInPictureInPictureMode) {// 画中画性能实现} else {// 返回惯例界面}
}
2021 年 5 月咱们发表推出 Chrome 操作系统低延迟时间触控笔 API,尽量升高绘画利用的提早。您能够立即返回 GitHub 查看 API 和演示版利用。
兼容性模式
△ 兼容性模式
在大屏幕平板电脑 Chromebook 或外接显示器上运行仅针对小尺寸竖屏 Android 手机设计的利用时,如果拉伸进入全屏视图,那么利用外观和性能可能会差强人意。利用可能呈现各种问题,包含布局欠佳,以及利用因为无奈正确处理多窗口或尺寸调整事件而产生的解体。像平板电脑和可折叠设施一样,Chrome 操作系统当初也有了兼容模式,针对小屏挪动设备设计的利用可在手机尺寸或平板尺寸的窗口中显示。
用户可轻松更改窗口的显示模式或按需启用窗口自在调整模式,但界面会告知用户,利用在残缺的大屏幕模式下运行可能呈现与预期不符的状况。这有助于 Chrome 操作系统提供合乎预期的成果和稳定性,同时用户仍然享有依照本人喜爱的形式与利用进行交互的自在。
在现实状况下您的利用不应该呈现在兼容模式下。接下来咱们聊聊在 Chrome 操作系统以及 Android 平板电脑和可折叠设施中防止利用呈现在兼容模式中所须要做到的重要的几件事:
△ 运行在凋谢模式模式充分利用屏幕空间
- 为不同的设施类型提供适合的大屏幕布局。
- 测试利用,确保利用可能解决折叠事件、旋转,可能移入分屏,可能自在调整大小。相似 ViewModel 等 Jetpack 组件简化了保护状态,并为用户提供合乎预期的成果。肯定要在实在设施或模拟器中测试不同的布局可能性。
- 依据利用需要妥善处理触摸、键盘、鼠标、触控板输出以及触控笔、游戏控制器等更为业余的输出形式。
如需更深刻理解,请移步至咱们在 Android 开发者峰会 上推出的更多对于大屏幕主题的技术分享,理解如何使布局更加好看、符合度更高,同时能够正确处理输出。如果您的利用曾经在 Chrome 操作系统上出现十分完满的外观,或是想理解从哪里开始优化,请 告知咱们。对于针对 Chrome 操作系统以及大屏幕进行优化的具体文档,请拜访 chromeos.dev。
折叠设施、平板电脑和 Chromebook 越来越受大家欢送。利用优化以后能做之事尚有很多,咱们将持续致力推出新性能进一步晋升利用成果。
总结
置信大家对 12L 对于大屏幕和利用设计上的一些新个性有了肯定的理解。欢送通过应用模拟器下载 12L 开发者预览版 摸索 12L 中的全新 API。
能够尝试应用 JetpackWindowManager 优化利用,依据准确的窗口尺寸调整显示区域,启用姿势探测等新性能。在新的版本中能够利用 Activity 内嵌 和测试 API 进而简化大屏幕布局保护。
别忘了退出好看的大屏幕布局,并增加键盘、鼠标和其余输出反对。心愿大家可能顺利完成对于大屏幕设施的利用革新来拥抱新的终端交互模式。
欢迎您 点击这里 向咱们提交反馈,或分享您喜爱的内容、发现的问题。您的反馈对咱们十分重要,感谢您的反对!