我们可以以编程方式更改状态栏或通知栏位置吗

Posted

技术标签:

【中文标题】我们可以以编程方式更改状态栏或通知栏位置吗【英文标题】:can we change status bar or notification bar position programmatically 【发布时间】:2021-01-06 07:27:18 【问题描述】:

我已将我的应用程序锁定为仅纵向模式,并且我自己处理了方向更改,但我意识到在横向模式下状态栏保持不变,并且 UI 体验会很差。

现在,我已经相应地开发了所有东西,对我来说唯一的解决方法似乎是以编程方式更改状态栏位置,因为我不(或实际上此时不能)尊重系统方向的变化。

这可能吗?以编程方式更改状态栏位置?仅在我的应用内并在我退出后恢复?

下面我已经说明了想要的效果:

首先,应用程序被锁定为纵向模式,当我旋转设备时,应用程序的视图会旋转,因为我会解析原始传感器数据并应用旋转,但在这种情况下,状态栏不会旋转(因为应用程序是锁定为纵向模式,我只能访问应用的视图进行旋转):

我如何完成上述操作的伪代码是:

View views[] = new View[]view1, view2, view3, view4 ....;
float rotationAngle = parseRawSensorData();//typically accelerometer input
for(View view: views)
    rotateWithAngle(rotationAngle);
  

因此视图会旋转,但状态栏是固定的。

我想做的是能够使用如下代码旋转状态栏:

即根据我获取的传感器数据旋转状态栏。

【问题讨论】:

好问题,我过去一直在寻找类似的东西,但我放弃了,找不到任何解决方案。祝你好运,我已经解决了你的问题 @juztcode ,非常感谢,非常感谢。 :-) 添加一些代码和图片真的很有帮助!! @kelvin ,我已经添加了相关代码和一些插图。 隐藏状态栏怎么样? 【参考方案1】:

状态栏是 android 系统的一部分,而不是您的应用程序的一部分。所以你无法从你的应用程序中控制它。

【讨论】:

难道没有某种方法可以告诉应用程序中的系统将其放置在某个地方吗? 如果不能从应用程序控制,可以从哪里控制? Android开发者可以控制状态栏。 @Ridcully ,我知道原生 c++ NDK 开发相对来说非常低,虽然我不是很熟悉。您知道那里有什么可以实现这一目标的吗? 即使使用 NDK,您的应用也不允许更改状态栏等系统内容。【参考方案2】:

您可以在使用应用时将其隐藏,而不是旋转状态栏。

进口:

import android.view.WindowManager

然后写这个:

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

【讨论】:

您好,感谢您的回答,但是,提示通知仍然会弹出,如果我们只是隐藏应用程序这不好,如果我们要隐藏它也可以在清单中完成.

以上是关于我们可以以编程方式更改状态栏或通知栏位置吗的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改解析推送通知图标?

如何在 Android 2016 中以编程方式更改应用程序图标

禁用个人热点通知

如何以编程方式确定推送通知状态?

如何以编程方式关闭通知托盘

Linux 运营商检测通知