由于 WindowInsets 处理更改,Android 15 中 FAB 下方出现不需要的填充 - 如何修复?

问题描述 投票:0回答:1

由于 WindowInsets 处理更改,Android 15 中 FAB 下方出现不需要的填充 - 如何修复?

从 Android 15 开始,

WindowInsets
的处理发生了变化,我遇到了 Android 14 或更低版本中不存在的问题。具体来说,就我而言,浮动操作按钮 (FAB) 下方存在不需要的填充或边距。当我的应用程序在 Android 15 上运行但在早期版本上运行时,会出现此问题。
floatingActionButton
androidx.compose.material3.Scaffold
的属性。

我观察到的:

  • 在 Android 15 上,浮动操作按钮 (FAB) 的底部似乎有额外的填充。
  • XML 中没有布局更改,版本之间的填充或边距也没有编程更改。
  • 我相信这可能与 Android 15 处理插图的方式有关,特别是在使用需要新旧版本
    WindowInsets
    之间互操作的视图时。

示例:

  • Android 14 及更低版本上的 FAB:看起来与预期一致,没有额外的填充。
  • Android 15 上的 FAB:底部有额外的填充,将其从屏幕边缘向上推。

Android 15 屏幕截图:

FAB on Android 15

我尝试过的:

  • 我已经验证了 FAB 的布局 XML,并确保没有显式设置填充或边距。
  • 我已经检查了我的代码是否有任何对填充或边距的编程更改,但没有发现任何更改。
  • 我尝试以编程方式应用
    setPadding()
    setMargin()
    方法来补偿额外的空间,但这并没有解决问题。
  • 我已经研究过处理
    WindowInsetsCompat
    ,但仍然没有找到正确的方法。

问题: 如何删除 Android 15 上浮动操作按钮下方的这种不需要的填充/边距,同时在 Android 14 及更早版本中保持布局一致?

android android-jetpack-compose floating-action-button android-jetpack-compose-material3 windowinsets
1个回答
0
投票

您可以通过在

contentWindowInsets
 可组合项中指定 
Scaffold
参数来删除不需要的填充,如下所示:

Scaffold(
  modifier = Modifier.fillMaxSize(),
  floatingActionButton = { /* FloatingActionButton here */ },
  contentWindowInsets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
) { innerPadding ->
   // Scaffold content here
}

此方法限制插入仅应用水平填充,从而防止任何会影响 FloatingActionButton 的垂直填充。当您想要精确控制插图时,它非常有用。您可以阅读更多关于

WindowInsets
这里
WindowInsetsSides
这里

但是,请注意,此解决方案在不需要垂直插入的特定情况下效果最佳。如果您的布局依赖于其他元素的全窗口插入,请注意此调整可能产生的潜在影响。

© www.soinside.com 2019 - 2024. All rights reserved.