java - 显示 DialogFragment 时隐藏系统导航栏

标签 java android

我的应用程序处于粘性沉浸模式系统导航栏(我称之为SNB)隐藏在我的应用程序运行时。它运行良好但存在一个问题,即每次我显示 DialogFragment 时,SNB 都会出现。我怎么能隐藏它。

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

MyActivity.java

@Override
protected void onResume() {
    super.onResume();
    hideSystemUI();
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    hideSystemUI();
}

public void hideSystemUI() {
    // Enables regular immersive sticky mode.
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    );
}

MyDialog.java

public class MyDialog extends DialogFragment{

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        AlertDialog alertD = builder.create();
        alertD.setView(view);
        return alertD;
    }

    public void show() {
        Activity activity = getActivity();
        show(activity.getSupportFragmentManager(), "dialog");
    }

    @Override
    public void onResume() {
        super.onResume();
        ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes();
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        getDialog().getWindow().setAttributes((WindowManager.LayoutParams) params);
    }
}

我按照答案显示对话框而不显示 SNB:https://stackoverflow.com/a/33589793/10467639但它没有按预期工作

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

 <!-- 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>

我该如何解决这个问题?提前致谢!

最佳答案

遵循这个答案https://stackoverflow.com/a/23207365/8531215 ,我已经测试过,它工作正常!稍微修改一下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;
}

关于java - 显示 DialogFragment 时隐藏系统导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986031/

相关文章:

java - 如何在 android 中将蓝牙设备发现超时设置为 1 小时(3600)秒并且从不超时

java - 使用 ksoap2-android 时出现异常

java - 如何收集不同节点的访问日志?

java - 从类中获取变量

android - Jetpack Compose 中的图像渐变

java - 我在更改日期格式时遇到问题

java - hessian,服务器接口(interface)升级时的兼容性

java - 从 Notes DateTime 对象设置 Java 日期对象

android - Firebase 崩溃报告或不同的 Crashlytics API key 以减轻与 App 中 Crashlytics 的冲突

java - 即使禁用了滑动,选项卡仍会随着 TabLayout 上的触摸移动而更改