Android 开发者 前天 19:36
Jetpack WindowManager 1.4 稳定版 | 更强大的多窗口体验
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Jetpack WindowManager 1.4 稳定版带来了多项更新,旨在增强 Android 多窗口模式的功能性和灵活性。新版本改进了 Activity 嵌入,包括 Activity 堆栈固定、窗格扩展以及对话框全屏调暗等特性。此外,WindowSizeClass API 也得到了更新,支持自定义值。这些改进使得开发者能够更好地构建自适应应用,提升在大屏设备上的用户体验。新版本还增强了对折叠设备的支持,提供了更多关于设备物理状态的信息。

✨ WindowSizeClass API 更新:更新了 WindowSizeClass API 以支持自定义值,并更改了 API 形态,使其易于扩展,以便支持自定义值和在未来添加新值。弃用了 WindowWidthSizeClass 和 WindowHeightSizeClass,推荐分别改为使用 WindowSizeClass#isWidthAtLeastBreakpoint() 和 WindowSizeClass#isHeightAtLeastBreakpoint()。

📌 Activity 嵌入功能增强:Activity 堆栈固定功能允许开发者将 Activity 堆栈固定到特定窗口,确保重要内容始终可见。窗格扩展功能(交互式分隔线)允许用户在分屏模式下调整 Activity 尺寸。对话框全屏调暗功能可以控制对话框的调暗背景,提供更统一的界面体验。

📱 增强的折叠状态支持:WindowInfoTracker#supportedPostures API 提供了关于设备物理性能的更多信息,帮助开发者构建在可折叠设备上流畅运行的应用。开发者可以知道设备是否支持桌面模式,并相应地优化应用的布局和功能。

原创 Android 2025-06-20 17:31 北京

Jetpack WindowManager 1.4 稳定版引入了多项新功能,使多窗口模式体验变得更加强大和灵活。

作者 / 开发者关系工程师 Xiaodao Wu


Jetpack WindowManager 正在不断改进。WindowManager 为您提供构建自适应应用的工具,使您的应用可以在各种大屏设备上流畅运行。Jetpack WindowManager 1.4 稳定版引入了新功能,使多窗口模式体验变得更加强大和灵活。虽然 Jetpack Compose 仍然是为不同屏幕尺寸创建应用布局的最佳方案,但是 1.4 版本为 Activity 嵌入带来了一些重大改进,包括 Activity 堆栈固定、窗格扩展和对话框全屏调暗 (Dialog full-screen dim)。多 Activity 应用可轻松利用所有这些出色的特性。



WindowManager 1.4 新功能



WindowManager 1.4 引入了一系列增强功能,欢迎您继续阅读了解亮点功能。


WindowSizeClass


我们更新了 WindowSizeClass API 以支持自定义值,更改了 API 形态,使其易于扩展,以便支持自定义值和在未来添加新值。主要变更如下:


🔗 WindowSizeClass 

https://developer.android.com/reference/kotlin/androidx/compose/material3/windowsizeclass/WindowSizeClass


以下是一个迁移示例:

// old 

val sizeClass = WindowSizeClass.compute(widthDp, heightDp)

when (sizeClass.widthSizeClass) {

  COMPACT -> doCompact()

  MEDIUM -> doMedium()

  EXPANDED -> doExpanded()

  else -> doDefault()

}

// new

val sizeClass = WindowSizeClass.BREAKPOINTS_V1

                               .computeWindowSizeClass(widthDp, heightDp)

when {

  sizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_EXPANDED_LOWER_BOUND) -> {

    doExpanded()

  }

  sizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_MEDIUM_LOWER_BOUND) -> {

    doMedium()

  }

  else -> {

    doCompact()

  }

}


新 API 中的一些注意事项:



Activity 嵌入



Activity 堆栈固定


Activity 堆栈固定提供了一种无论您的应用中出现何种情况都可使 Activity 堆栈始终显示在屏幕上的方法。您可以通过该功能将 Activity 堆栈固定到特定窗口。这样一来,即使用户在另一个窗口中导航到应用的其他部分,顶层 Activity 也会保持可见。如果您想要在用户浏览其他内容时,使某些内容保留在屏幕上 (例如实时聊天或视频播放器),该功能会非常适用。

private fun pinActivityStackExample(taskId: Int) {

 val splitAttributes: SplitAttributes = SplitAttributes.Builder()

   .setSplitType(SplitAttributes.SplitType.ratio(0.66f))

   .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)

   .build()

 val pinSplitRule = SplitPinRule.Builder()

   .setDefaultSplitAttributes(splitAttributes)

   .build()

 SplitController.getInstance(applicationContext).pinTopActivityStack(taskId, pinSplitRule)

}


窗格扩展


全新的窗格扩展功能 (也称为交互式分隔线) 允许您在分屏模式下在两个 Activity 之间创建视觉分隔。您可以将窗格分隔线设置为可拖动,以便用户实时调整窗格以及窗格中 Activity 的尺寸。用户可借此控制他们查看应用内容的方式。

val splitAttributesBuilder: SplitAttributes.Builder = SplitAttributes.Builder()

   .setSplitType(SplitAttributes.SplitType.ratio(0.33f))

   .setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)


if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {

   splitAttributesBuilder.setDividerAttributes(

       DividerAttributes.DraggableDividerAttributes.Builder()

           .setColor(getColor(context, R.color.divider_color))

           .setWidthDp(4)

           .setDragRange(

               DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)

           .build()

   )

}

val splitAttributes: SplitAttributes = splitAttributesBuilder.build()


🔗 窗格扩展

https://m3.material.io/foundations/layout/applying-layout/pane-layouts#d3ef6c37-d8a5-4029-99d1-033ec6db39a6


对话框全屏调暗


WindowManager 1.4 可助您更好地控制对话框调暗背景的方式。通过对话框全屏调暗 (Dialog full-screen dim) 功能,您可以选择仅调暗显示对话框的容器,或调暗整个任务窗口,以获得统一的界面体验。默认情况下,当对话框打开时,整个应用窗口都会变暗 (请参阅 EmbeddingConfiguration.DimAreaBehavior.ON_TASK)。如果只想调暗打开对话框的 Activity 的容器,请使用 EmbeddingConfiguration.DimAreaBehavior.ON_ACTIVITY_STACK。您可以借此更灵活地设计对话框,同时提供更流畅、更连贯的用户体验。Temu 是首批集成此功能的开发者之一,他们表示对话框全屏调暗功能使屏幕上的无效触碰次数减少了约 5%。

△ Temu 中采用对话框全屏调暗功能的自定义购物车提醒


🔗 EmbeddingConfiguration.DimAreaBehavior.ON_TASK

https://developer.android.com/reference/androidx/window/embedding/EmbeddingConfiguration.DimAreaBehavior#ON_TASK%28%29

🔗 EmbeddingConfiguration.DimAreaBehavior.ON_ACTIVITY_STACK

https://developer.android.com/reference/androidx/window/embedding/EmbeddingConfiguration.DimAreaBehavior#ON_ACTIVITY_STACK%28%29



增强的折叠状态支持



WindowManager 1.4 可提供有关设备物理性能的更多信息,助您轻松构建能够在可折叠设备上流畅运行的应用。全新的 WindowInfoTracker#supportedPostures API 可让您知道设备是否支持桌面模式,以便您可以相应地优化应用的布局和功能。

val currentSdkVersion = WindowSdkExtensions.getInstance().extensionVersion

val message =

if (currentSdkVersion >= 6) {

  val supportedPostures = WindowInfoTracker.getOrCreate(LocalContext.current).supportedPostures

  buildString {

    append(supportedPostures.isNotEmpty())

    if (supportedPostures.isNotEmpty()) {

      append(" ")

      append(

      supportedPostures.joinToString(

      separator = ",", prefix = "(", postfix = ")"))

    }

  }

else {

  "N/A (WindowSDK version 6 is needed, current version is $currentSdkVersion)"

}


🔗 WindowInfoTracker#supportedPostures

https://developer.android.com/reference/kotlin/androidx/window/layout/WindowInfoTracker#supportedPostures%28%29



其他 API 变更



WindowManager 1.4 包含多项 API 变更和新增功能,用于支持新特性。显著变更包括:



使用指南



要开始在您的 Android 项目中使用 Jetpack WindowManager 1.4,请将 build.gradle.kts 中的应用依赖项更新为最新稳定版:

dependencies {

    implementation("androidx.window:window:1.4.0-rc01")

    ...  

    // or, if you're using the WindowManager testing library:

    testImplementation("androidx.window:window-testing:1.4.0-rc01")

}


乐享编码!欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态!





阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Jetpack WindowManager Android开发 多窗口模式
相关文章