Android 棒棒糖导航栏与重力重叠对话框。底部

Android 棒棒糖导航栏与重力重叠对话框。底部,android,dialog,android-4.4-kitkat,android-immersive,android-navigation-bar,Android,Dialog,Android 4.4 Kitkat,Android Immersive,Android Navigation Bar,为了让我的对话框浮动到屏幕的底部,占据整个屏幕的宽度,就像一个抽屉一样,我正在遵循上面介绍的技术。除了棒棒糖之外,这在我瞄准的每一个版本的Android上都有效。该对话框将浮动在软件导航按钮back、home和stack的后面,从而无法按下对话框上的负按钮或正按钮 我尝试过所概述的方法,但没有成功。我已经考虑过在所有对话框中添加底部填充,但这意味着我必须设置自定义视图,而不是使用alertdialog Builder或其他方法。我想可能有一种方法可以避免这种情况,但我没有找到 编辑1: 我现在已

为了让我的对话框浮动到屏幕的底部,占据整个屏幕的宽度,就像一个抽屉一样,我正在遵循上面介绍的技术。除了棒棒糖之外,这在我瞄准的每一个版本的Android上都有效。该对话框将浮动在软件导航按钮back、home和stack的后面,从而无法按下对话框上的负按钮或正按钮

我尝试过所概述的方法,但没有成功。我已经考虑过在所有对话框中添加底部填充,但这意味着我必须设置自定义视图,而不是使用alertdialog Builder或其他方法。我想可能有一种方法可以避免这种情况,但我没有找到

编辑1:

我现在已经尝试了SetSystemMiviability方法,通过禁用全屏、沉浸式和隐藏导航的标志。然而,对话框在创建时仍然位于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>

导航栏是半透明的吗?您的对话框在导航栏后面吗?如果出现这种情况,您可以设置对话框的主题。例如,您可以将对话框的窗口标志设置为非全屏、非半透明。如果不起作用,您可以使用以下方法设置UI标志:setSystemVisibilityInt arg

如何设置反向标志。在查看该函数时,我看到了将其设置为fulscreen和transparent的标志,但我不知道如何使其执行相反的操作。关于切换标志的信息,我在此处编辑了代码以实现setSystemMiviability方法并更新了op。但是,这并没有纠正位于软件导航按钮后面的对话框的问题。在启动代码中添加:getWindow.clearFlagsWindowManager.LayoutParams.FLAG_全屏;getWindow.getDecorView.SetSystemActivity 0;或'getWindow.setFlagsWindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;getWindow.getDecorView.SetSystemActivity0;`您还可以设置状态栏的颜色,并将导航栏设置为非半透明谢谢!就像你说的,我需要设置false,这两者都需要用于对话的主题,而不仅仅是基本活动。无论我对SetSystemMiviability做了什么更改,这似乎都是可行的