有人知道如何更改 Qt 应用程序的 Android 状态栏颜色吗?
到目前为止,我已经尝试了很多 C++ 解决方案 - 它们似乎都失败了,因为该代码不在主 ui 线程内运行 - 以及
AndroidManifest.xml
和 styles.xml
中的一些 xml 调整 - 这似乎会影响至少是工具栏*,但不是状态栏*..
有人可以提供 C++ 解决方案,或者有人用 xml 达到结果吗?
感谢您的帮助!
*关于术语“状态栏”和“工具栏”:Android 将两个不同的 ui 元素称为“状态栏”。所以在这种情况下,我将其中之一称为“工具栏”。澄清一下:
解决了!感谢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);