【问题标题】:Qt for Android - Statusbar colorQt for Android - 状态栏颜色
【发布时间】:2018-03-01 20:37:06
【问题描述】:

有人知道如何更改 Qt 应用程序的 Android 状态栏颜色吗?

到目前为止,我已经尝试了很多 c++ 解决方案 - 它们似乎都失败了,因为该代码不在主 ui 线程内运行 - 以及 AndroidManifest.xmlstyles.xml 中的一些 xml 调整 - 这似乎至少影响工具栏*,但不影响状态栏*..

有人可以提供 c++ 解决方案吗,或者有人用 xml 达到了结果吗?

感谢您的帮助!


*关于“状态栏”和“工具栏”这两个术语:Android 将两个不同的 ui 元素称为“状态栏”。所以在这种情况下,我称其中之一为“工具栏”。澄清一下:

【问题讨论】:

    标签: android c++ qt user-interface statusbar


    【解决方案1】:

    已解决

    感谢Volodymyr Shevchyk

    最终解决方案:(我的有点硬编码)

    QtAndroid::runOnAndroidThread([=]()
    {
        QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;");
        window.callMethod<void>("addFlags", "(I)V", 0x80000000);
        window.callMethod<void>("clearFlags", "(I)V", 0x04000000);
        window.callMethod<void>("setStatusBarColor", "(I)V", 0xffffffff); // Desired statusbar color
    });                                                      // A R G B
    

    使用来自herehere 的提取。

    确保您使用的是 Qt 5.7 或更高版本。否则QtAndroid::runOnAndroidThread 将不起作用。

    注意

    如果您使用白色或其他非常亮的颜色作为背景,则可以使用以下代码使状态栏的文本变暗一点:

        QAndroidJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
        decorView.callMethod<void>("setSystemUiVisibility", "(I)V", 0x00002000);
    

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2015-11-20
      • 1970-01-01
      • 2023-03-12
      • 2017-03-05
      • 2015-07-16
      • 2015-05-09
      相关资源
      最近更新 更多