Lollipop导航栏重叠Dialog与Gravity.Bottom

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lollipop导航栏重叠Dialog与Gravity.Bottom相关的知识,希望对你有一定的参考价值。

我遵循here概述的技术,让我的Dialog浮动到屏幕的底部并占据整个宽度,类似于抽屉。除了Lollipop之外,这适用于我所定位的每个android版本(16+)。对话框将浮动在软件导航按钮(背面,主页和堆栈)后面,因此无法按下对话框上的消极或正面按钮。

我尝试了here概述的方法,但没有成功。我已经考虑过为所有对话框添加底部填充 - 但这意味着我必须设置自定义视图而不是使用alertdialog构建器其他方法。我认为可能有办法避免这种情况,我找不到。

编辑1:

我现在尝试了setSystemUiVisibility方法,通过禁用全屏,沉浸式和隐藏导航的标志。但是,对话框在创建时仍然位于屏幕上的导航按钮后面(在API 22中测试)。我也试过了

decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

这是我目前的代码:

@Override
public void onStart()
{
    super.onStart();

    AlertDialog dlg = (AlertDialog) getDialog();

    Window window = dlg.getWindow();
    WindowManager.LayoutParams params = window.getAttributes();
    params.width = ViewGroup.LayoutParams.MATCH_PARENT;
    params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    params.gravity = Gravity.BOTTOM;

    window.setAttributes(params);
    View decor = window.getDecorView();
    int flagset = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
    decor.setSystemUiVisibility(decor.getSystemUiVisibility() & ~flagset);

}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Theme_DialogTheme);
    //various methods adding elements to dialog

    Dialog dlg = builder.create();

    return dlg;

}

和我的风格:

<style name="Theme.SnapTrash" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/black</item>
    <item name="colorPrimary">@color/colorSnapTrashPrimary</item>
    <item name="android:colorBackground">@color/colorSnapTrashPrimary</item>
    <item name="android:textColorPrimary">@color/colorSnapTrashTextPrimary</item>
    <item name="android:windowBackground">?android:attr/colorBackground</item>
    <item name="colorAccent">@color/colorSnapTrashAccent</item>
    <item name="colorPrimaryDark">@color/colorSnapTrashPrimaryDark</item>
    <item name="android:colorForeground">@android:color/black</item>
    <item name="android:textColorPrimaryInverse">@color/colorSnapTrashTextPrimaryInverse</item>
    <item name="android:navigationBarColor">@android:color/black</item>
    <item name="android:textColorSecondaryInverse">@color/secondary_text_material_dark</item>
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="android:windowTranslucentNavigation">false</item>

</style>

<style name="Theme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowBackground">@android:color/white</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:textColor">#FFEF5350</item>
    <item name="android:textColorPrimary">#FFEF5350</item>
    <item name="android:colorAccent">#999</item>
</style>

以上是关于Lollipop导航栏重叠Dialog与Gravity.Bottom的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

在 iOS 7 中让导航栏与状态栏重叠

导航栏标题视图与左栏按钮项重叠

如何将我的 React 组件放置在导航栏下方(这样导航栏不会与它重叠)?