一起看 I/O | Jetpack Compose 中的新特性

转载地址:https://mp.weixin.qq.com/s/jTEXk_58KxMUgOL33VOn4w

Jetpack Compose 1.0 正式版已经发布快一年的时间了,我们看到社区正以极大的热情采纳和使用 ComposeKotlin 语法的简洁性以及使开发界面变得更快速、更简单的声明式开发方式得到了广大开发者们的赞赏。

Compose 在社区中的反响

我们看到许多公司已经在大规模采纳 Compose 为其应用开发最新、最具创造性的功能。例如,与我们密切合作的 Play 商店团队很早便开始使用 Compose,通过他们我们了解到,使用 Compose 不仅更有趣,且对他们团队生产力的提高也大有助益。Play 商店团队还告诉我们 “Play 商店的所有新功能都建立在该框架之上,Compose 有助于为应用解锁更快的速度以及更顺畅地发布”。与此同时,Twitter 也已经在应用的不同部分使用了 Jetpack Compose 并从中受益,因为 "Compose 让我们更容易定义自己的组件,并使它们的 API 更明确、灵活和直观。"Airbnb 团队同样也采用了 Compose: “Jetpack Compose 是我们技术战略的重要组成部分,生产力因此获得了大幅提高。”

  • 许多公司已经在大规模采纳 Compose https://developer.android.google.cn/jetpack/compose/adopt#what-developers-are-saying

  • Twitter https://android-developers.googleblog.com/2022/04/twitter-going-all-in-on-jetpack-compose.html

我们很高兴地看到这些团队在大规模和复杂的生产环境中仔细地评估并使用了 Compose,所带来的结果也不仅是让界面开发更清晰有趣,也带来了更多工程上的收益。这只是其中几个案例,因为 Play 商店排名前 1,000 的应用中有超过 100 个正在使用 Compose。

我们在开发过程中始终保持着与这些团队的密切合作,并不断听取广大 Android 社区的反馈,这也是我们推进路线图的关键。如今,我们专注于提供新的 API 和特性改进以支持您实现更高级的需求,这些改进将和新的工具一起助力您更轻松地使用 Compose 构建应用。Compose 从根本上改变了界面的构建方式,为了帮助您实现必要的思维转变,我们将发布更多关于高级主题的指南、演讲和 Codelab,以及更具深度的视频,以便您编写外观和性能同样出色的应用。以下是 Compose 1.2 Beta 版本的新特性:

  • 路线图https://developer.android.google.cn/jetpack/androidx/compose-roadmap

Compose 1.2 Beta

我们在今年的 Google I/O 大会上发布了 Compose 1.2 的第一个 Beta 版本,其中包含了许多特性和改进:https://developer.android.google.cn/jetpack/androidx/releases/compose#versions

文本改进

字体边距

我们在问题跟踪器中定位到了得票最高的问题之一,并通过将 includeFontPadding 设置为自定义参数来解决它。我们推荐您将该值设为 false,因为这会使布局中的文本更精确地对齐。我们计划在未来的版本中将 false 设为默认值。如果将值设为 false 导致您的应用出现问题,请在上述错误报告中告知我们。此外,当 includeFontPadding 被设置为 false 时,您可通过设置lineHeightStyle 参数来调整 Text 可组合项的行高。两个参数结合使用的效果如下:

△ 以多行的 Text 可组合项为例:

左图为设置 includeFontPadding 为 true (当前默认值) 的效果,

右图为设置 includeFontPadding 为 false 且设置了 lineHeightStyle 的效果

Text(
 text = myText,style = TextStyle(
   lineHeight = 2.5.em,platformStyle = PlatformTextStyle(
     includeFontPadding = false
   ),lineHeightStyle = LineHeightStyle(
     alignment = Alignment.Center,trim = Trim.None
   )
 )
)
  • 得票最高的问题之一 https://issuetracker.google.com/u/0/issues/171394808

可下载字体

Compose 1.2 还加入了可下载字体。您可以使用 Compose 的新 API 来异步访问 Google Fonts,甚至还可以定义备用字体,这些操作无需任何复杂的配置。通过可下载字体,您可以保持较小的 APK 文件体积并改善用户的系统运行状况,因为多个应用可通过提供程序共享相同字体。

  • 可下载字体http://developer.android.google.cn/jetpack/compose/text#downloadable-fonts

文本放大镜

Android 文本提供了放大镜组件,通过放大镜可以更轻松地选择文本。Compose 现已支持文本放大镜。

拖动选择图标时会显示放大镜,以便于您查看指尖下方的内容。Compose 1.1.0 已支持在所选择的文本字段中使用放大镜,Compose 1.2.0 在文本字段和 SelectionContainer 中都支持放大镜。Compose 放大镜也得到了增强以匹配 View 中放大镜的精确行为。

  • SelectionContainerhttps://developer.android.google.cn/reference/kotlin/androidx/compose/foundation/text/selection/package-summary#SelectionContainer(androidx.compose.ui.Modifier,kotlin.Function0)l

布局功能和改进

惰性布局

惰性布局在不断发展,随着网格 API LazyVerticalGrid 和 LazyHorizontalGrid 顺利通过实验性使用阶段,我们新增了一个实验性 API——LazyLayout,它允许开发者实现自定义惰性布局。想要了解这些 API 的更多信息,请观看 I/O 大会演讲: Compose 中的惰性布局。

  • LazyVerticalGrid
    http://link.gevents.cn/D5dyVH

  • LazyHorizontalGrid
    http://link.gevents.cn/863Hvf

  • LazyLayout http://link.gevents.cn/aBMaBU

  • Compose 中的惰性布局 https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/

与 CoordinatorLayout 互操作

从现在起,当您在 View 系统的 CoordinatorLayout 中嵌套了一个支持滚动的可组合项时,您可以确保它们的滚动行为是可互操作的。这让可折叠工具栏的配置变得更加简单。您可以调用新的实验性 API rememberNestedScrollInteropConnection,并将其调用结果传入 nestedScroll 修饰符来启用该行为,可以查看这个示例代码了解更多:https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/NestedScrollInteropSamples.kt

窗口边衬区

Accompanist 中的 insets 库现已升级到 Compose Foundation 库中,请改为使用WindowInsets 类。如需了解更多,请查阅将 Compose 与现有界面集成技术文档:https://developer.android.google.cn/jetpack/compose/interop/compose-in-existing-ui#ime-animations

  • Accompanist 中的 insets 库 https://google.github.io/accompanist/insets/

  • WindowInsets
    https://developer.android.google.cn/reference/kotlin/androidx/compose/foundation/layout/WindowInsets

窗口大小类

为了更简单地设计、开发以及测试可调整尺寸布局,我们发布了窗口大小类——一组主观的视窗断点。它们现在作为 Material 3 系列库的一部分,在新库 material3-window-size-class 的 alpha 版本中可用。如需了解更多有关窗口大小类的信息,请查阅支持不同屏幕尺寸以及 Crane 中的示例实现。

  • material3-window-size-class https://developer.android.google.cn/jetpack/androidx/releases/compose-material3

  • 支持不同屏幕尺寸 https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes#window_size_classes

  • Crane 中的示例实现https://github.com/android/compose-samples/commit/0edb1926ac56c50a188be022c15117c07811fcdf

专注于性能

为帮助您了解和提升应用的性能,我们花费了大量精力为您提供新的性能工具和指南。这些内容可以帮助您更轻松地理解应用可能出现卡顿的原因和位置。

从 Android Studio Dolphin 开始,您可以使用 Layout Inspector 检查可组合项发生重组的频率。预期外的大量重组可以为您指明可优化的可组合项。此外,Android Studio Electric Eel 现已包含一个重组高亮指示器,它是一个视觉辅助工具,可以查看哪些可组合项在何时发生重组。更多关于该新工具的信息请查阅博客 Android Studio 中的新特性:

https://android-developers.googleblog.com/2022/05/whats-new-in-android-studio.html


△ Layout Inspector 显示重组计数和重组高亮指示器

Compose 从根本上改变了您编写界面的方式,您可以遵循我们发布的最佳实践来确保应用的高性能。例如,您可以通过该文档了解关于如何编写和配置您的 Compose 应用以实现最佳性能的建议。在 I/O 演讲 Jetpack Compose 中常见的性能问题中,Compose 团队介绍了常见的性能错误以及这些错误的解决方法。

  • 文档
    https://developer.android.google.cn/jetpack/compose/performance

  • Jetpack Compose 中常见的性能问题
    https://io.google/2022/program/213421b6-9873-464f-9b36-38eeb232a854/

性能是一个需要持续关注的领域,我们正在努力改进并扩展相关工具和指南。同时,我们非常感谢您对我们迄今为止所有工作的反馈。您可以在问题跟踪器中提出您开发中遇到的问题,也可以在KotlinLang Slack 群组中提问。

  • 问题跟踪器
    https://issuetracker.google.com/issues/new?component=612128

  • KotlinLang Slack
    https://surveys.jetbrains.com/s3/kotlin-slack-sign-up

新工具

除了完善 Compose 之外,我们还增加了新工具来帮助您更高效地使用 Compose。Android Studio Dolphin 目前已处于 Beta 阶段,为 Compose 开发带来了非常激动人心的特性。除了重组计数,新工具还包含了能帮助您一次查看和浏览所有动画的 Animation Coordination,以及能帮助您为多个屏幕尺寸构建应用的 MultiPreview 注解。此外为了帮助您快速迭代,Android Studio Electric Eel (Canary 版) 还带来了 LiveEdit 这个新特性。

  • Android Studio Dolphin https://developer.android.google.cn/studio/preview

请查阅 I/O 演讲: Android 开发工具中的新特性以了解所有详细信息,同时我们希望能得到您的反馈,从而塑造更符合您需求的 Compose 工具:
https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/

Compose for Wear OS Beta 版发布

如果有什么比 Compose 更出色,那就是更多更全面的 Compose。因此,我们很高兴见证Compose for Wear OS 进入 Beta 阶段。遵循与其他 Jetpack 库相同的原则,Beta 意味着它的功能完整且 API 稳定,您可以开始准备为生产环境构建应用。如需了解更多信息,请查阅这篇博客文章:
https://android-developers.googleblog.com/2022/05/announcing-compose-for-wear-os-beta.html

更完善的指南

我们增加并修订了关于 Compose 的一系列指南供您参考和学习:

  • 关于在 Compose 中使用状态的研讨会和改版的 Codelab

  • 研讨会 https://io.google/2022/program/c9768969-9e81-4865-9dff-29a2ab1201ea/

  • Codelab https://developer.android.google.cn/codelabs/jetpack-compose-state

  • 关于 Compose 中基础布局的研讨会和改版的 Codelab

  • 研讨会 https://io.google/2022/program/05c2523e-be40-4c63-8308-5379b9717a7c/

  • Codelab https://developer.android.google.cn/codelabs/jetpack-compose-layouts

  • 全新的 Compose 性能说明文档
    https://developer.android.google.cn/jetpack/compose/performance

  • 更新的自定义输入文档
    https://developer.android.google.cn/jetpack/compose/handling-interaction.html

  • I/O 演讲视频: Jetpack Compose 中常见的性能问题以及 Compose 中的惰性布局

  • Jetpack Compose 中常见的性能问题 https://io.google/2022/program/213421b6-9873-464f-9b36-38eeb232a854/

  • Compose 中的惰性布局 https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/

  • 对于新手开发者,可查阅 Android 基础课程: 使用 Compose
    https://developer.android.google.cn/courses/android-basics-compose/course

Happy Composing!

我们期待您能像我们一样为这些新特性感到兴奋,如果您尚未开始,那么现在正是学习 Jetpack Compose 的好时机,了解它如何适配您的团队和开发过程,这样您便能体验到提高效率和开发者生产力所带来的好处。Happy Composing!

  • Jetpack Composehttp://developer.android.google.cn/jetpack/compose

原文地址:https://blog.csdn.net/weixin_61845324

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题,导致无法更新,出现该问题的原因是由于3.0版本与较早的sdk版本之间文件结构有冲突,解决
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方
Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法。一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现,这种方式代码量最小。在Button的属性中有一个是drawable
Android中的"Unable to start activity ComponentInfo"的错误 最近在做一款音乐播放器的时候,然后在调试的过程中发现一直报这个错误"Unable to start activity ComponentInfo",从字面
Android 关于长按back键退出应用程序的实现最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序。在网上查找了很多资料,发现几乎没有这样的实现,大部分在处理时是双击back键来退出应用程序。参考了一下双击back键退出应用程序的代码,网上主流的一种方法是下面
android自带的时间选择器只能精确到分,但是对于某些应用要求选择的时间精确到秒级,此时只有自定义去实现这样的时间选择器了。下面介绍一个可以精确到秒级的时间选择器。 先上效果图: 下面是工程目录: 这个控件我也是用的别人的,好像是一个老外写的,com.wheel中的WheelView是滑动控件的主
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平台上应用比较成熟,而在Android平台上主流还是用zxing库,因此这里主要讲述如何利用zxing
Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的item默认的外观,下面讲解以下在使用listview时最常见的几个问题。1.如何改变item的背景色和按
如何向Android模拟器中导入含有中文名称的文件在进行Android开发的时候,如果需要向Android模拟器中导入文件进行测试,通过DDMS下手动导入或者在命令行下通过adb push命令是无法导入含有中文文件名的文件的。后来发现借用其他工具可以向模拟器中导入中文名称的文件,这个工具就是Ultr
Windows 下搭建Android开发环境一.下载并安装JDK版本要求JDK1.6+,下载JDK成功后进行安装,安装好后进行环境变量的配置【我的电脑】-——>【属性】——>【高级】 ——>【环境变量】——>【系统变量】中点击【新建】:变量名:CLASSPATH变量值:……
如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹出菜单,此时可以考虑用PopupWindow来实现。下面就来介绍一下如何使用PopupWindow实现一个弹出窗。 主Activity代码:public void onCreat
解决Android中的ERROR: the user data image is used by another emulator. aborting的方法 今天调试代码的时候,突然出现这个错误,折腾了很久没有解决。最后在google上找到了大家给出的两种解决方案,下面给出这两种方法的链接博客:ht
AdvserView.java package com.earen.viewflipper; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory;
ImageView的scaleType的属性有好几种,分别是matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY。 |值|说明| |:--:|:--| |center|保持原图的大小,显示在ImageVie
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win10/Android studio 3.21.环境配置 在SDK Tools里选择 CMAKE/LLDB/NDK点击OK 安装这些插件. 2.创建CMakeLists.txt文件 在Project 目录下,右键app,点击新建File文件,命名为CMakeLists.txt点击OK,创建完毕! 3.配置文件 在CMa..._link c++ project with gradle
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由mainActivity界面跳转到otherActivity界面1.写好两个layout文件,activity_main.xml和otherxml.xmlactivity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout ="http://schemas..._android studio 界面跳转
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件来用,然后发现了这两款神作,都是外国的软件,而且都是开源的软件,因此把源码下载了下来,给有需要研究代理这方面的童鞋看看。不得不说,国外的开源精神十分浓,大家相互使用当前基础的开源软件,然后组合成一个更大更强的大开源软件。好吧,废话不多说,下面简单介绍一下这两款开源项目。一、ProxyDroid:ProxyDroid功能比较强大,用到的技术也比较多,源码也_proxydroid
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项目时Gradle Build 窗口却显示错误:程序包R不存在通常情况下是不会出现这个错误的。我是怎么遇到这个错误的呢?第一次创建项目,company Domain我使用的是:aven.com,但是创建过程在卡在了Building 'Calculator' Gradle Project info这个过程中,于是我选择了“Cancel”第二次创建项目,我还是使用相同的项目名称和项目路_r不存在
文章浏览阅读8.9w次,点赞4次,收藏43次。前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下:一、推荐从Google Play下载ProxyDroid,目前最新版本是v2.6.6。二、对ProxyDroid进行配置(基本配置:) (1) Auto S_proxydroid使用教程
文章浏览阅读1.1w次,点赞4次,收藏17次。Android Studio提供了一个很实用的工具Android设备监视器(Android device monitor),该监视器中最常用的一个工具就是DDMS(Dalvik Debug Monitor Service),是 Android 开发环境中的Dalvik虚拟机调试监控服务。可以进行的操作有:为测试设备截屏,查看特定进程中正在运行的线程以及堆栈信息、Logcat、广播状态信息、模拟电话_安卓摄像头调试工具