Java 显示DialogFragment时隐藏系统导航栏

Java 显示DialogFragment时隐藏系统导航栏,java,android,Java,Android,我的应用程序处于粘性沉浸模式,系统导航栏(我称之为SNB)隐藏在我的应用程序运行时。它工作正常,但存在一个问题,每次我显示一个对话框片段,SNB就会出现。我怎么能把它藏起来 我在acivity类中编写了几行代码,使我的应用程序成为全屏和粘性沉浸模式 MyActivity.java MyDialog.java 我按照答案显示对话框,但没有显示SNB:但它没有按预期工作 MyDialog dialog = new MyDialog(); // Set the dialog to not focusa

我的应用程序处于
粘性沉浸模式
,系统导航栏(我称之为SNB)隐藏在我的应用程序运行时。它工作正常,但存在一个问题,每次我显示一个
对话框片段
,SNB就会出现。我怎么能把它藏起来

我在acivity类中编写了几行代码,使我的应用程序成为全屏和
粘性沉浸模式

MyActivity.java

MyDialog.java

我按照答案显示对话框,但没有显示SNB:但它没有按预期工作

MyDialog dialog = new MyDialog();
// Set the dialog to not focusable.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
dialog.show();
// Set the dialog to focusable again.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
style.xml


@颜色/主题颜色
@颜色/主题颜色
@颜色/主题颜色
@颜色/黑色
@颜色/黑色
@颜色/白色
12dp
@字体/粗体
@颜色/暗颜色
假的
真的
@可绘制/飞溅背景
12dp
@字体/nunitosans\u常规
@颜色/通用文本颜色
12dp
@字体/nunitosans\u常规
@颜色/白色
15dp
40dp
40dp
@字体/nunitosans\u常规
13dp
@颜色/白色
@字体/nunitosans\u常规
@颜色/黑色
@颜色/黑色
@颜色/成功颜色
@颜色/白色
@颜色/白色
@颜色/白色
@字体/nunitosans\u常规
真的
我怎样才能解决这个问题?提前感谢

根据文件:

实现onWindowFocusChanged()。如果获得窗口焦点,可能需要重新隐藏系统栏。如果您丢失了窗口焦点,例如由于应用程序上方显示的对话框或弹出菜单,您可能希望取消以前使用Handler.postDelayed()或类似工具计划的任何挂起的“隐藏”操作

因此,我建议您做的是,将
MyActivity.java
中的代码更改为:

@覆盖
WindowFocusChanged上的公共无效(布尔hasFocus){
super.onWindowFocusChanged(hasFocus);
hideSystemUI();
}
致:

@覆盖
WindowFocusChanged上的公共无效(布尔hasFocus){
如果(!hasFocus){
//我们失去了焦点,因为对话片段
hideSystemUI();
}
}
按照这个答案,我已经测试过了,效果很好!稍微修改一下
onCreateDialog()
方法

public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        AlertDialog alertD = builder.create();
        alertD.setView(view);
        Dialog dialog = alertD.create();
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

        //Show the dialog!
        dialog.show();

         //Set the dialog to immersive sticky mode
        dialog.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        //Clear the not focusable flag from the window
        dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
        return alertD;
}

嘿,你能在这里显示你的
style.xml
文件吗。@ravi我认为这个问题不是由xml引起的,xml文件实际上很长而且很混乱!它只是描述了我的活动界面!我们不应该真的对问题的原因做出假设。但如果你认为这些信息能解决你的问题,那么祝你好运。@ravi我为我的天真假设感到抱歉。我已经用
style.xml
文件编辑了我的答案。你能再帮我一次吗?这是一个轻快的人。我已经发布了一个答案,尝试一下,让我知道这个帮助是否有效,但在我的场景中导航栏出现的时间不到一秒钟。是否有任何解决方案使导航栏不出现。我在播放器中有一个dialogfragment用于视频质量选择。
MyDialog dialog = new MyDialog();
// Set the dialog to not focusable.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
dialog.show();
// Set the dialog to focusable again.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
 <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/themeColor</item>
        <item name="colorPrimaryDark">@color/themeColor</item>
        <item name="colorAccent">@color/themeColor</item>
        <item name="colorControlNormal">@color/black</item>
        <item name="colorControlActivated">@color/black</item>
        <item name="colorControlHighlight">@color/white</item>
    </style>
    <style name="BoldGrayHeaderTextView">
        <item name="android:textSize">12dp</item>
        <item name="android:fontFamily">@font/nunitosans_bold</item>
        <item name="android:textColor">@color/darkColor</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <!-- Splash Screen theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_background</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <!-- For CarPinItem on Map -->
    <style name="carPinItemUnSelected">
        <item name="android:textSize">12dp</item>
        <item name="android:fontFamily">@font/nunitosans_regular</item>
        <item name="android:textColor">@color/generalTextColor</item>
    </style>

    <style name="carPinItemSelected">
        <item name="android:textSize">12dp</item>
        <item name="android:fontFamily">@font/nunitosans_regular</item>
        <item name="android:textColor">@color/white</item>
    </style>

    <!-- Style for drawer navigation item                                                                       -->
    <style name="NavigationDrawerStyle">
        <item name="android:textSize">15dp</item><!-- text size in menu-->
        <item name="android:listPreferredItemHeightSmall">40dp</item><!-- item size in menu-->
        <item name="listPreferredItemHeightSmall">40dp</item><!-- item size in menu-->
    </style>

    <!--Style for textInputEditText   -->
    <style name="TextInputLayoutStyle">
        <item name="android:fontFamily">@font/nunitosans_regular</item>
        <item name="android:textSize">13dp</item>
        <item name="android:textColor">@color/white</item>

    </style>
    <!--Style for profile bottom menu   -->
    <style name="BottomTextLayoutStyle">
        <item name="android:fontFamily">@font/nunitosans_regular</item>
        <item name="android:textColor">@color/black</item>
    </style>

    <style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
        <item name="android:textColorPrimaryInverse">@color/black</item>
        <item name="android:colorControlActivated">@color/successColor</item>
    </style>

    <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorControlNormal">@color/white</item>
        <item name="colorControlActivated">@color/white</item>
        <item name="colorControlHighlight">@color/white</item>

    </style>

    <!--BottomNavivagionView textsize-->
    <style name="Widget.BottomNavigationView"
        parent="Widget.Design.BottomNavigationView">
        <item name="android:fontFamily">@font/nunitosans_regular</item>
    </style>

    <style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowNoTitle">true</item>
    </style>
</resources>
public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        AlertDialog alertD = builder.create();
        alertD.setView(view);
        Dialog dialog = alertD.create();
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

        //Show the dialog!
        dialog.show();

         //Set the dialog to immersive sticky mode
        dialog.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        //Clear the not focusable flag from the window
        dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
        return alertD;
}