问题标签 [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.
android - 使用最新的 WindowInset API 出现软键盘时如何调整对话框布局
问题:
如何使用最新的 WindowInset API调整对话框和软键盘之间的空间?
我有一个带有一些 EditText 的 BottomSheetDialog。默认动画将在我的 EditText 正下方显示软键盘,它将覆盖我的保存按钮。在做了一些研究之后,我将这一行添加到我的BottomSheetDialog
片段中
它起作用了(如下图所示)!
但显然SOFT_INPUT_ADJUST_RESIZE
已弃用。
而且我不知道如何使用 newOnApplyWindowInsetsListener
来达到相同的效果。这是我当前的BottomSheetDialog
片段:
我在另一个片段中使用了一个 onclicklistener 来显示这个对话框。代码在Another fragment
android - ScrollView 和 WindowInsets
我在尝试正确使用 WindowInsets 时遇到了问题。
这是我的初始布局:
fixedBottomView
具有固定大小,同时stretchableView
填充剩余空间。
这是它的样子,以及当键盘出现时会发生什么(到目前为止一切都很好):
在另一种情况下,我试图实现类似的行为,但使用 WindowInsets。
这就是我处理 WindowInsets 的方式:
你看,我在ScrollView
. 在这种情况下会发生以下情况:
静态布局看起来不错,但是键盘EditView
出现时会重叠,这是我的问题。
WindowInsets 似乎处理得当,因为您可以向下滚动查看EditText
:
这是我活动的完整 XML:
android - 获取系统插图的正确方法
我一直在使用view.rootWindowInsets.stableInsetTop
and 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。
android - Android - Fragment 中的 WindowInsetsController 破坏了整个视图
我有一个用于拍照的 Fragment,我想让它处于全屏模式。在 API 30 之前,我使用此处官方文档中描述的标志。但是在将我的项目版本升级到 30 后,Android Studio 告诉该标志已弃用。所以,我搜索了很多,并在这里找到了一些类似这样的问题。按照答案,我将代码更改为:
在片段中,我这样称呼这个方法:
这是一个演示:
如您所见,用户无法访问顶部的按钮,视图的底部也是白色的。我希望有人能帮帮忙。
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?
android - 如何使用 WindowInsets API(兼容版)显示/隐藏键盘?
我正在使用 WindowInsets API 来打开/隐藏键盘,但它似乎不适用于 Compat 版本(目标 API 29)或其他东西。
布局:
有什么建议么?
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 可见性。
有人可以帮我吗?提前致谢。
java - WindowInsetListener 在 Android R (Api 30) 中将偏移量加倍
我编写了一个键盘动画来使控件(任何视图)跟随软键盘的滑入和滑出动画。在 Android 10 及更低版本中一切正常。
我从proandroiddev上的这篇(同时)过时的文章(在 Android 11 之前编写,不幸的是用 Kotlin 编写,而且它也不太关心已弃用的方法)中获得了这个想法,但翻译成 Java 效果很好 - 剩下的唯一问题是 Api30+
在 Android 11 中,当动画结束时,WindowInsetListener
(或delayedTransition
,我不知道是什么原因导致问题)似乎将偏移量加倍(即第二次将软键盘的完整高度添加到视图的边界)。
看看这两个 gif 显示的差异(对不起质量 - 我对视频录制不太深入)。
在两个设备上运行相同的代码。
左边是安卓10,右边是安卓11
这是监听器:
这是我从监听器调用的动画方法:
我试图通过版本尊重所有弃用。尤其是Android的这一部分在每个版本中都发生了变化。但是,即使我取出 Api 29 和 30 的“新”实现,并且当我使用不推荐使用的.replaceSystemWindowInsets
方法时,效果也保持不变。
任何人都知道 Api 30+ 中需要提供的附加标志或其他东西吗?
android - 如何使用 WindowInsets 启用和禁用全屏模式?
我有 2 个功能,可帮助我在我的应用程序中启用和禁用全屏模式。默认情况下,我的应用程序未处于全屏模式。我想要的行为是当用户打开一个片段时,5 秒后我启用全屏模式。当用户触摸屏幕时,我禁用全屏模式,但 3 秒后我再次启用它。这是我编写的代码(我使用的是旧版本)
这enableFullScreenRunnable
是一个简单的runnable,它enableFullScreen()
在一定的延迟后调用该函数。当用户打开片段时,5 秒后我enableFullScreen()
使用处理程序和可运行对象调用该函数。我有一个根视图的点击监听器,所以当用户点击屏幕时,我调用disableFullScreen()
.
最后,我有一些 UI 元素,例如 textView,它需要与我的应用程序的状态同步。因此,当应用程序进入全屏模式时,我必须隐藏我的 textView,反之亦然。
问题是,Android 11 不推荐使用所有这些标志。在 Android Studio 中,它说要使用 WindowsInsets 而不是这些标志。如何使用 WindowInsets 实现相同的功能?在官方文档中,代码不是最新的,它仍然使用旧标志