当前位置: 首页 > 知识库问答 >
问题:

在android 4.4或kitkat中全屏隐藏状态栏

宋涵衍
2023-03-14

我使用以下代码隐藏状态栏全屏的目的:

    void HideEverything(){
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        } else {
            View decorView = getWindow().getDecorView();
            // Hide the status bar.
            int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
            // Remember that you should never show the action bar if the
            // status bar is hidden, so hide that too if necessary.
            ActionBar actionBar = getActionBar();
            actionBar.hide();
        }
    }

它以全屏模式显示屏幕,但当我触摸状态栏时,它会显示状态栏。我尝试了其他选项来添加应用程序中的全屏主题和无标题栏主题,以及清单中的活动级别,但结果仍然相同…:(

我不想在任何一步显示状态栏。如何在android中实现这一点?

编辑:

Android OS版本是4.4.2(上面的代码在4.3上运行,但在4.4.2上不运行)

更新:

问题已经解决了。。。答案分别写在下面。。。

共有3个答案

通寂离
2023-03-14

使用下面的代码,你可以使用全屏;

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

在setcontentview上面写下面的代码。

注意:本次活动不要给任何主题。

希望这有帮助。

孙渝
2023-03-14

我们无法阻止状态在kitkat或更高版本的设备中以全屏模式出现,因此请尝试黑客攻击以阻止状态栏扩展。

对于一个想法,在状态栏上放一个覆盖层,并消耗所有输入事件。这将阻止状态栏扩展。

闻飞跃
2023-03-14

由于Android版本是4.4.2,所以没有解决方案可以解决这个问题。

正如@Academy of Programmer评论的那样;此解决方案不适用于Android 6及以上版本。

但是根据Sunny的建议,问题已经通过阻止状态栏的扩展得到了解决。

解决方案是:

在主要活动中编写一个内联customViewGroup类。

public class customViewGroup extends ViewGroup {

        public customViewGroup(Context context) {
            super(context);
        }

        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            Log.v("customViewGroup", "**********Intercepted");
            return true;
        }
    }

现在,在main活动的onCreate方法中,在setContentView()之前添加以下代码:

WindowManager manager = ((WindowManager) getApplicationContext()
                .getSystemService(Context.WINDOW_SERVICE));

        WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
        localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        localLayoutParams.gravity = Gravity.TOP;
        localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|

                // this is to enable the notification to receive touch events
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |

                // Draws over status bar
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;

        localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        localLayoutParams.height = (int) (50 * getResources()
                .getDisplayMetrics().scaledDensity);
        localLayoutParams.format = PixelFormat.TRANSPARENT;

        customViewGroup view = new customViewGroup(this);

        manager.addView(view, localLayoutParams);

上面的代码将禁用状态栏的扩展。现在按照代码制作全屏,将其添加到上面代码的正下方和setContentView之前:

//fullscreen
        requestWindowFeature(Window.FEATURE_NO_TITLE);   
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

现在在清单中添加权限:

<!-- prevent expanding status bar -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

你就完了……)

缺点:此代码禁用设备状态栏的扩展,而不仅仅是活动或应用程序,所以如果您真的需要它,请使用它。

感谢您提供的所有解决方案和建议……:)

 类似资料:
  • 我正在制作一个Android锁屏应用程序。我的问题是状态栏。我在Androidanifest.xml上写了这一行。Android:主题="@Android:风格/主题。NoTitleBar。全屏"但是用户可以在没有应用程序的情况下滚动状态栏并解锁手机。那么如何完全隐藏状态栏呢?

  • 问题内容: 如何在ios 9中隐藏状态栏? 现在不推荐使用: 问题答案: 斯威夫特3 更改为 删除 更改为 之所以可行,是因为计算变量具有getter函数,因此您之前实现的函数只是变成了getter函数 2016年起:简单的事物 在您的info.plist上,为statusBar隐藏添加以下两个属性 查看基于控制器的状态栏外观(布尔值:否) 状态栏最初是隐藏的(布尔值:是) 按来源 要么 旧答案!

  • 我们正在为老年人开发一个启动应用程序,它有一个非常简单的用户界面,我们不想显示状态栏或通知抽屉。 现在,我试图禁用状态栏,但当我从屏幕上方向下拉时,它似乎重新出现。如果我第二次下拉通知抽屉被打开。有没有办法完全禁用状态栏? 我查看了以下链接上的文档,但我认为没有解决方案。在API级别16中,我们能够完全禁用它,但在API级别19中无法禁用。https://developer.android.com

  • 问题内容: 如何在Android HoneyComb中隐藏或删除状态栏?每次运行应用程序时,我都会发现状态栏必须覆盖一些内容。 我已尝试更改,但没有任何更改。 问题答案: 你不知道 与电容式家庭/菜单/等相同,它被认为是永久性的屏幕装饰。Android手机触摸屏下方的按钮。 您如何衡量可用于内容的空间?

  • 如何在ios 9中隐藏状态栏? 现在已弃用:

  • 在我的项目中,我可以在iPhone上隐藏状态栏。 但它不适用于我的iPad我怎么能在iPad上隐藏状态栏?