问题标签 [windowinsets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
515 浏览

android - Window Insets 是如何被消费的,消费对 insets 意味着什么?

布局如下图

并在视图层次结构中的每个项目中调用消耗插图

哪个打印

为什么setOnApplyWindowInsetsListener即使我调用消耗,插图也不消耗任何内容。

编辑

在日志中添加了消耗的插图,但它们都没有显示除 0 以外的任何值。

并且有这个输出在此处输入图像描述

如何修复 BottomAppBar 和 AppBarLayout 的插图?

0 投票
3 回答
7042 浏览

android - 使用最新的 WindowInset API 出现软键盘时如何调整对话框布局

问题:

如何使用最新的 WindowInset API调整对话框和软键盘之间的空间?


我有一个带有一些 EditText 的 BottomSheetDialog。默认动画将在我的 EditText 正下方显示软键盘,它将覆盖我的保存按钮。在做了一些研究之后,我将这一行添加到我的BottomSheetDialog片段中

它起作用了(如下图所示)!

这就是我想要的

但显然SOFT_INPUT_ADJUST_RESIZE已弃用。

而且我不知道如何使用 newOnApplyWindowInsetsListener来达到相同的效果。这是我当前的BottomSheetDialog片段:

我在另一个片段中使用了一个 onclicklistener 来显示这个对话框。代码在Another fragment

事实上,日志表明当软键盘弹出时,监听器从未被触发。仅供参考,我正在关注这个视频这个博客

0 投票
0 回答
99 浏览

android - ScrollView 和 WindowInsets

我在尝试正确使用 WindowInsets 时遇到了问题。

这是我的初始布局:

fixedBottomView具有固定大小,同时stretchableView填充剩余空间。

这是它的样子,以及当键盘出现时会发生什么(到目前为止一切都很好):

1

在另一种情况下,我试图实现类似的行为,但使用 WindowInsets。

这就是我处理 WindowInsets 的方式:

你看,我在ScrollView. 在这种情况下会发生以下情况:

2

静态布局看起来不错,但是键盘EditView出现时会重叠,这是我的问题。

WindowInsets 似乎处理得当,因为您可以向下滚动查看EditText

3


这是我活动的完整 XML:

0 投票
0 回答
637 浏览

android - 获取系统插图的正确方法

我一直在使用view.rootWindowInsets.stableInsetTopand bottom 来获取状态和导航栏的高度,但是现在已弃用,文档建议使用 rootWindowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top

所以我现在有下面的代码

这可以在 API 24 和 API 30 模拟器上找到,但是在运行 API 29(Andorid 10)的 Galaxy S20 FE 上这不起作用。

我收到以下错误

显然systemBars() 在 API 29 中被列入灰名单,在 API 30 中被列入黑名单。(尽管运行 API 29,设备仍然抛出)

那么我应该使用什么来获取适用于 API 级别 24 及更高级别的信息?

我可以view.rootWindowInsets.stableInsetTop像上面那样使用,但我更喜欢使用未弃用的 API。

0 投票
0 回答
293 浏览

android - Android - Fragment 中的 WindowInsetsController 破坏了整个视图

我有一个用于拍照的 Fragment,我想让它处于全屏模式。在 API 30 之前,我使用此处官方文档中描述的标志。但是在将我的项目版本升级到 30 后,Android Studio 告诉该标志已弃用。所以,我搜索了很多,并在这里找到了一些类似这样的问题。按照答案,我将代码更改为:

在片段中,我这样称呼这个方法:

这是一个演示:

在此处输入图像描述

如您所见,用户无法访问顶部的按钮,视图的底部也是白色的。我希望有人能帮帮忙。

0 投票
1 回答
426 浏览

android - windowInsetsController vs windowInsetsControllerCompat? I can only access the former

So i was watching this tutorial by google today here https://youtu.be/jal0l48OTxk and i figured that doing

is now deprecated and i need to use windowInsetsController instead. First off, I am new to android and i don't know how to use this new thing which clearly doesn't work in the exact same way as the old API so it's not a direct replacement but rather more nuanced one. Seondly, I noticed that windowInsetsController is not backwards compatible and there is something like windowInsetsControllerCompat that exists out there. However, I am not able to access it like this:

but

works fine. Can someone here help me out?

0 投票
1 回答
397 浏览

android - 如何使用 WindowInsets API(兼容版)显示/隐藏键盘?

我正在使用 WindowInsets API 来打开/隐藏键盘,但它似乎不适用于 Compat 版本(目标 API 29)或其他东西。

布局:

有什么建议么?

0 投票
0 回答
870 浏览

android - 如何使用 WindowInsetsCompat API 检查 API 19 的 ime 可见性?

我正在尝试使用 WindowInsetsCompat API 检查软键盘是否可见。

我发现的一种解决方案是

但是这个getRootWindowInsets(view)函数只适用于API >= 23。对于较低的 API,它总是返回null.

根据 android发行说明

WindowInsetsCompat API 已更新为 Android 11 平台中的 API。这包括新的 ime() 插入类型,它允许检查屏幕键盘的可见性和大小。
关于 ime() 类型的一些注意事项,当您的 Activity 使用 adjustResize 窗口软输入模式时,它在 API 23+ 上非常可靠地工作。如果您改用 adjustPan 模式,它应该可以可靠地返回到 API 14。

它说 ime() 类型在使用 adjustPan 时应该可靠地返回 API 14。我正在使用 19 的 minSdk 并且无法确定使用哪些函数来检查 ime 可见性。

有人可以帮我吗?提前致谢。

0 投票
0 回答
258 浏览

java - WindowInsetListener 在 Android R (Api 30) 中将偏移量加倍

我编写了一个键盘动画来使控件(任何视图)跟随软键盘的滑入和滑出动画。在 Android 10 及更低版本中一切正常。

我从proandroiddev上的这篇(同时)过时的文章(在 Android 11 之前编写,不幸的是用 Kotlin 编写,而且它也不太关心已弃用的方法)中获得了这个想法,但翻译成 Java 效果很好 - 剩下的唯一问题是 Api30+

在 Android 11 中,当动画结束时,WindowInsetListener(或delayedTransition,我不知道是什么原因导致问题)似乎将偏移量加倍(即第二次将软键盘的完整高度添加到视图的边界)。

看看这两个 gif 显示的差异(对不起质量 - 我对视频录制不太深入)。

在两个设备上运行相同的代码。

左边是安卓10,右边是安卓11

安卓 10 安卓 11

这是监听器:

这是我从监听器调用的动画方法:

我试图通过版本尊重所有弃用。尤其是Android的这一部分在每个版本中都发生了变化。但是,即使我取出 Api 29 和 30 的“新”实现,并且当我使用不推荐使用的.replaceSystemWindowInsets方法时,效果也保持不变。

任何人都知道 Api 30+ 中需要提供的附加标志或其他东西吗?

0 投票
1 回答
281 浏览

android - 如何使用 WindowInsets 启用和禁用全屏模式?

我有 2 个功能,可帮助我在我的应用程序中启用和禁用全屏模式。默认情况下,我的应用程序未处于全屏模式。我想要的行为是当用户打开一个片段时,5 秒后我启用全屏模式。当用户触摸屏幕时,我禁用全屏模式,但 3 秒后我再次启用它。这是我编写的代码(我使用的是旧版本)

enableFullScreenRunnable是一个简单的runnable,它enableFullScreen()在一定的延迟后调用该函数。当用户打开片段时,5 秒后我enableFullScreen()使用处理程序和可运行对象调用该函数。我有一个根视图的点击监听器,所以当用户点击屏幕时,我调用disableFullScreen().

最后,我有一些 UI 元素,例如 textView,它需要与我的应用程序的状态同步。因此,当应用程序进入全屏模式时,我必须隐藏我的 textView,反之亦然。

问题是,Android 11 不推荐使用所有这些标志。在 Android Studio 中,它说要使用 WindowsInsets 而不是这些标志。如何使用 WindowInsets 实现相同的功能?在官方文档中,代码不是最新的,它仍然使用旧标志