问题标签 [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 投票
1 回答
113 浏览

android - WindowInsetsControllerCompat.OnControllableInsetsChangedListener 不会触发插入显示操作

我有这个听众:

我将它添加到instetsController这样的:

当我执行时它工作正常:

但是当我点击我的屏幕并显示导航栏时,这个监听器永远不会触发,从我在文档中阅读的内容来看,它应该。

我知道这个监听器在我隐藏系统栏时起作用,因为我可以看到它将消息打印到我的 logcat 中。

0 投票
0 回答
100 浏览

android - 当屏幕强制旋转时,WindowInsets 总是返回 0

当我得到宽度和高度的屏幕尺寸时,我以前使用WindowManager().getDefaultDisplay().getMetrics(metrics)过,这是下面的整个代码。

在 Android 11中,getDefaultDisplay().getMetrics(metrics)已弃用。
所以我找到了“WindowInsets”,它在屏幕显示时运行良好。
当屏幕从纵向到纵向或从横向到横向时,它也能很好地工作。
但有一个问题。当我强行将屏幕从纵向旋转到横向时,WindowInsets无法获得准确的当前显示尺寸。
详细地说,它是 3 步。

1. 启动应用程序。

2.应用一启动,屏幕就强制从纵向转为横向。

3. WindowInsets 无法获取Insets.rightand Insets.left

这是获取显示大小的整个代码。

屏幕旋转后如何获得Insets.rightand ?Insets.left

另外
,我发现了一些线索。请检查以下内容。

  1. 当我再次启动应用程序时,它会获得正确的值(宽度,高度),但当我第一次启动应用程序时它不能。

  2. 在第二次,我关闭应用程序并触摸主屏幕,然后重新启动应用程序,它无法获得正确的宽度和高度。

  3. 如果您不触摸或拖动主屏幕,即使关闭应用程序,您也可以获得正确的宽度、高度。

所以它运行得很奇怪。

0 投票
1 回答
50 浏览

android - WindowInsets 与 InputMethodManager !在android中显示和隐藏软键的正确方法

我应该使用什么;WindowInsetsInputMethodManager在 android 中显示和隐藏软键盘?在不影响应用程序性能的情况下,哪种方法是执行所引用任务的正确方法?

我希望键盘显示和隐藏流畅。

0 投票
0 回答
234 浏览

android - OnApplyWindowInsetsListener 在横向模式下检测键盘可见性变化

多亏了这个很好的答案:https ://stackoverflow.com/a/63595830/741795我们现在可以跟踪键盘何时在 Android 中显示...不幸的是,我发现了一些问题。

事实证明,对于 API 29 及更低版本,OnApplyWindowInsetsListener.onApplyWindowInsets仅调用了:

  • 当活动在清单中有“adjustResize”标志时
  • 仅适用于纵向模式。

对于 api 30+,一切都适用于纵向和横向,并且没有标志。

由于这些限制,对于 api 29- 我使用不同的方法(见下面的代码),使用OnGlobalLayoutListener.onGlobalLayout

然后是实际的听众:

问题:onGlobalLayout当键盘在横向模式下显示/隐藏时不调用,我在许多模拟器和手机上尝试过,它确实适用于平板电脑。

我找到了这个示例项目:https ://github.com/android/user-interface-samples/tree/master/WindowInsetsAnimation但在 API 21-29 中也不会调用这些方法,这对于动画来说很好,但是不是我的情况,所以那里一定有问题。我到处搜索,根本没有找到任何有关此的信息。

更多信息:这将是一个 SDK 代码,所以我不能指望用户在清单中设置任何标志或我正在使用的任何 fitSystemWindows 标志,androidx.core:core-ktx:1.5.0但 1.6.0 有同样的问题。

关于我可以尝试什么的任何想法?我怀疑窗口不同,因为键盘与editText一起占据了整个屏幕,但为什么它可以与新的APIS一起使用?

0 投票
0 回答
136 浏览

android - ViewCompat.setOnApplyWindowInsetsListener() 改变系统导航栏的背景

应用程序通常有这个导航栏:

在此处输入图像描述

但是当我添加ViewCompat.setOnApplyWindowInsetsListener()

或者

变成这样

在此处输入图像描述

为什么会这样?我不希望这种方法改变任何东西。我只是想用它来检测虚拟键盘是否可见(没有其他好的方法可以做到)

0 投票
2 回答
462 浏览

android - Android 11 全屏与协调器布局状态栏间距问题

我在 Android 11 中面临全屏沉浸式模式的问题。我的主要活动布局文件看起来像这样,

我正在尝试从我的片段中显示全屏模式。在 Android 11 之前,我曾经从 Fragment 的 onCreate 视图调用以下函数

我将其替换为,

这会按预期删除状态栏,但会在状态栏区域的屏幕顶部留下一个空白区域

带状态栏:

在此处输入图像描述

状态栏已移除:

在此处输入图像描述

我试图测量片段内的窗口插图并调整片段容器的高度

但是我的 ViewCompat.setOnApplyWindowInsetsListener 永远不会被调用。根据本文,Coordinator Layout 使用 onApplyWindowInsets 回调,并且子级不会收到任何回调。rootView是我的 Fragment 的根视图(一个相对布局),它被放置在我的布局层次结构中的 FragmentContainer 中。

Android 10 和 11 之间的比较

在此处输入图像描述

我的问题:

  1. 我应该如何setOnApplyWindowInsetsListener在片段中调用我的方法?
  2. 当状态栏隐藏时,我应该如何让我的协调器布局知道占据全屏?

参考:协调器布局消耗回调:

  1. setOnApplyWindowInsetsListener 从未调用过
  2. https://medium.com/androiddevelopers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec
  3. https://newbedev.com/fitssystemwindows-effect-gone-for-fragments-added-via-fragmenttransaction
0 投票
0 回答
18 浏览

android - 为响应出现的 android 导航插图做一些事情

我正在寻找一种在用户从侧面滑动以显示菜单后以全屏模式显示我的 NavigationRailView 的方法(当应用 WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE 时)我想让我的 NavigationRailView 可见并消失。有什么方法可以听到这种变化吗?

0 投票
0 回答
37 浏览

android - setOnApplyWindowInsetsListener - statusBar 颜色问题

为什么当我使用

setOnApplyWindowInsetsListener

状态栏颜色消失?

0 投票
0 回答
161 浏览

java - 如何使用 WindowInsetsController 在 android 11 上更改状态栏文本颜色?

我正在看这个教程视频,并写了一个简单的方法来自定义我的 statusBar 和 navigationBar 颜色。这是代码:

它大部分都在工作。

问题

但在 android 11 上,statusBar 文本颜色没有改变。谁能帮助我或告诉我如何更改 statusBar 文本颜色?

如果您在片段中,以下是该方法的示例用法:

请注意,我不想使用已弃用的标志或旧代码。我想学习使用windowInsetsController. 感谢您的阅读。

编辑

我的问题被关闭了。但是调试了1天后,我发现了问题。已设置标志window.decorView.windowSystemUiVisibilityView.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR所以在调用我的方法之前,我只是简单地调用了这段代码:

这为我解决了问题。总之谢谢大家。

0 投票
1 回答
207 浏览

android - 在片段更改时恢复窗口插图

我有三个片段。我想在一个片段上应用透明状态栏。为此,我setOnItemSelectedListener在底部导航栏的方法上调用了下面的 hide 方法。还添加了我现在得到的图像

我在片段调用隐藏方法时得到了适当的行为。 在此处输入图像描述

但是当我点击另一个片段(需要显示状态栏的片段)时,我得到以下行为:

在此处输入图像描述