Qt for Android - 状态栏颜色

问题描述 投票:0回答:1

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

到目前为止,我已经尝试了很多 C++ 解决方案 - 它们似乎都失败了,因为该代码不在主 ui 线程内运行 - 以及

AndroidManifest.xml
styles.xml
中的一些 xml 调整 - 这似乎会影响至少是工具栏*,但不是状态栏*..

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

感谢您的帮助!


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

android c++ qt user-interface statusbar
1个回答
1
投票

解决了!感谢Volodymyr Shevchyk

解决方案:

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

使用来自这里这里的摘录。

确保您使用的是 Qt 5.7 或更高版本。否则

QtAndroid::runOnAndroidThread
将无法工作。

编辑:从 Qt >= 6.2 开始,此代码需要在 UI 线程上运行(参见 here)。

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

QAndroidJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
decorView.callMethod<void>("setSystemUiVisibility", "(I)V", 0x00002000);
© www.soinside.com 2019 - 2024. All rights reserved.