窗口动画与 Android 5.0 上的导航栏重叠

Posted

技术标签:

【中文标题】窗口动画与 Android 5.0 上的导航栏重叠【英文标题】:Window animation overlaps navigation bar on Android 5.0 【发布时间】:2014-12-24 19:21:18 【问题描述】:

我正在使用 Dialog 的自定义子类在我的应用程序中实现 Material Design bottom sheet 设计模式。对话框被吸引到屏幕底部并使用 y 平移窗口进入动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/decelerate_cubic">
    <translate android:fromYDelta="100%"
        android:toYDelta="0"
        android:duration="250" />
</set>

在早期版本的 Android 上,这看起来很棒(如果我自己这么说的话):对话框从屏幕底部和导航栏下方平滑滑入。

但是,在最新的 5.0 预览图像上,窗口动画发生在导航栏的顶部,因此对话框内容暂时与导航重叠。对于这个特殊的用例,它看起来很丑陋、奇怪和分散注意力。

我可以在我的主题或代码中设置什么来防止这种情况发生吗?

【问题讨论】:

你用来启动动画的代码是什么?您的自定义 Dialog 子类是如何实现的? 请在所有视图所在的位置显示您的主 xml 文件。 窗口动画是通过对话框指定的XML主题资源设置的。 你最终解决了这个问题吗? 【参考方案1】:

随便用

<item name="android:windowDrawsSystemBarBackgrounds">false</item>

用于显示对话框的活动。在这种情况下,您的对话框将在动画期间位于导航栏下方。

【讨论】:

解决了这个问题,但是使用上面的标志时状态栏不是半透明的。 这样,Bottom Sheet 动画似乎仍然与软导航栏重叠,但不像默认情况下那样明显。有没有办法让它完全退出软导航栏下方的视图? 忽略我之前的评论。如果动画持续时间减慢到超过 1.5 秒,则此方法有效。希望它适用于任何动画持续时间。【参考方案2】:

来自 android 开发者网站:

在此版本中,Android 引入了一个新的工具栏小部件。这是 Action Bar 模式的概括,它为您提供了更多的控制和灵活性。工具栏是您的层次结构中的一个视图,就像任何其他视图一样,可以更轻松地与您的其余视图交错、对其进行动画处理以及对滚动事件作出反应。您还可以将其设置为 Activity 的操作栏,这意味着您的标准选项菜单操作将显示在其中。

所以操作栏现在是您布局中的一个视图,这就是弹出窗口越过它的原因。 我也知道他们介绍了一些 z-index 属性,这可能对你有帮助。

【讨论】:

我说的不是操作栏,而是设备导航栏(返回、主页、最近)。

以上是关于窗口动画与 Android 5.0 上的导航栏重叠的主要内容,如果未能解决你的问题,请参考以下文章

Lollipop导航栏重叠Dialog与Gravity.Bottom

阻止 div 在导航栏上重叠

如何让导航栏下拉菜单与身体重叠?

引导导航栏菜单与文本重叠

更改 Android 5.0 操作栏颜色

切换侧边栏时如何在导航栏中移动/动画文本值