Android 应用中 v21 的导航栏和状态栏颜色(无主题库)
Posted
技术标签:
【中文标题】Android 应用中 v21 的导航栏和状态栏颜色(无主题库)【英文标题】:Navigationbar and statusbar color for v21 in Android app (no theme libraries) 【发布时间】:2021-09-12 17:44:29 【问题描述】:我正在开发一些不是我创建的应用程序,我想为 API 21 及更高版本设置导航栏和通知栏颜色。应用程序的主题是纯 XML,没有新的应用程序主题库。我什至可以设置那些具有如此奇怪的主题设置并仅使用 xml 的颜色吗?有人可以解释一下菜鸟友好的东西在哪里添加吗?
我尝试了各种各样的东西
<item name="android:navigationBarColor">@color/theme_color</item>
但我似乎总是把事情搞糊涂。
我只有themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.phttpp.TitleBar" parent="android:Theme">
<item name="android:windowTitleBackgroundStyle">@style/windowTitleBackgroundStyle</item>
<item name="android:windowTitleStyle">@style/windowTitleStyle</item>
<item name="android:windowTitleSize">50dip</item>
</style>
<style name="Theme.dialog.TitleBar" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleStyle">@style/windowTitleStyle</item>
<item name="android:windowTitleSize">50dip</item>
</style>
</resources>
和
values 文件夹中的styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowTitleBackgroundStyle">
<item name="android:background">#00BCD4</item>
</style>
<style name="windowTitleStyle">
<item name="android:textColor">#FFFFFF</item>
<item name="android:padding">12dip</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">16sp</item>
<item name="android:background">#00BCD4</item>
<item name="android:maxLines">1</item>
</style>
</resources>
【问题讨论】:
【参考方案1】:在我的情况下,在 theme.xml 中添加这些行
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.NoActionBar">
...
colors and other stuff
...
<!-- Status bar color. -->
<item name="android:statusBarColor" >@color/my_color</item>
<item name="android:fitsSystemWindows">true</item>
<item name="android:windowLightStatusBar">true</item>
<!-- Navigation bar color. -->
<item name="android:navigationBarColor">@color/my_color</item>
</style>
【讨论】:
谢谢,但这对我不起作用,并且 android:windowLightStatusBar 为 true 使状态栏内容隐藏,它变成一个黑条。完全没有颜色变化。【参考方案2】:我找到了适用于 API21 及更高版本的解决方案。 我没有更改主题和样式的任何内容,但我将 colors.xml 添加到 /values-v21
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#00BCD4</color>
<color name="colorPrimaryDark">#008394</color>
<color name="colorAccent">#33c9dc</color>
<color name="colorGray">#e0e0e0</color>
</resources>
并将其添加到我的主要活动中,以在我的 Java 代码中进行 onCreate
if (Build.VERSION.SDK_INT >= 21)
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
getWindow().setNavigationBarColor(getResources().getColor(R.color.colorGray));
【讨论】:
以上是关于Android 应用中 v21 的导航栏和状态栏颜色(无主题库)的主要内容,如果未能解决你的问题,请参考以下文章
Android 12系统源码_SystemUIDisplayPolicy构建状态栏和导航栏视图窗口区域坐标