【问题标题】:How to hide status bar and make content appear behind on every device?如何隐藏状态栏并使内容出现在每台设备上?
【发布时间】:2022-02-16 23:56:21
【问题描述】:

目标

我正在尝试隐藏状态栏并让内容出现在它后面。

我尝试过的

在我目前正在开发的手机(Samsung Galaxy S9+)上,我设法让它与这个功能一起工作

    public static void removeAndroidNavBar(View view){
        int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE       
                | View.SYSTEM_UI_FLAG_FULLSCREEN              
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE           
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY        
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;        
        view.setSystemUiVisibility(uiOptions);
    }

像这样在SetContentView()之后在OnCreate()方法上调用

removeAndroidNavBar(getWindow().getDecorView());

问题

但是,我在 OxygenOs 上的 OnePlus Nord 2 上运行代码,但这不起作用。 状态栏不显示(取而代之的是一个黑色空间),但是我不知道如何让它完全消失,让内容出现在它的后面。

文档

正如文档所说HERE

在 Android 4.1 及更高版本上,您可以将应用程序的内容设置为显示在状态栏后面,以便内容不会随着状态栏的隐藏和显示而调整大小。为此,请使用 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。您可能还需要使用 SYSTEM_UI_FLAG_LAYOUT_STABLE 来帮助您的应用保持稳定的布局。

这就是我正在做的,我只在 One Plus Nord 2 设备上遇到了这个问题

我做错了什么?

【问题讨论】:

标签: java android android-studio android-statusbar


【解决方案1】:

如果你想实现这样的目标

试试这样:-

fun Activity.makeStatusBarTransparent() {

            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    window.apply {
                        clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
                        addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
                        addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
                        //                    addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            if(hasImmersive(context)){
                                decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                                        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                                        View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or
                                        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                            }else {
//                                decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
//                                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
//                                        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
//                                        View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

                                if (Build.VERSION.SDK_INT >= 21) {
                                    var window = getWindow();
                                    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                                    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

//                                    window.setStatusBarColor(context.getResources().getColor(color));
                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                        var decor = getWindow().getDecorView();
                                        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                                    }
                                }
                               /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                                    val controller = getWindow().insetsController
                                    controller?.systemBarsBehavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
                                    controller?.hide(WindowInsets.Type.statusBars())
                                }*/
                            }
                        } else {
                            decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        }
                        statusBarColor = Color.TRANSPARENT
                    }
                }
                Log.d("Has onscreen Navigation"," "+hasImmersive(context))
            } catch (e: Exception) {
            }

        }

【讨论】:

    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2017-01-08
    • 2015-07-05
    • 2010-11-11
    • 2017-02-04
    • 2016-02-15
    相关资源
    最近更新 更多