如何在布局/样式XML中设置状态栏色调?

时间:2014-10-16 10:47:06

标签: java android xml drawable android-4.4-kitkat

我在我的应用主题中使用windowTranslucentStatus

现在,还要将状态栏设置为与我的ActionBar匹配。

目前我正在使用SystemBarTint库,除了一个问题外,这个库大多没问题:

当应用程序启动时,操作系统会在实际通胀期间将主题模型布局显示为启动图像。在那个阶段,还没有状态栏着色。

看起来像那样(在应用启动期间我花了5次来捕获这个屏幕截图): No tinting

仅在活动完全加载后才应用色调。这对我来说是一个问题,我正在寻找一种方法,以便在发布过程中以某种方式显示状态栏上的完整品牌。

我已阅读This blog post其中说明了如何通过指定windowBackground来实际控制启动期间显示的内容。

我将windowBackground设置为我的主色 - >然后整个屏幕涂成粉红色。

我将我的activity的根元素上的background属性设置为白色,但是在启动期间再次将屏幕设置为粉红色,并且只有在加载活动后,内容的背景才会清除为白色。这很好但不理想。

我知道我可以创建一个带有白色背景和状态栏应该是的颜色的位图,但是它不会是主题的,这意味着如果主要颜色发生变化,我将不得不创建一个新的位图

总而言之,我的问题是:你知道一种为XML中的状态栏(在KitKat中)设置色彩的方法吗?

或者,是否可以创建一个XML drawable,它在顶部包含一个固定高度的彩色条?

2 个答案:

答案 0 :(得分:4)

这是: The (almost) perfect answer

很高兴知道其他人正在像我一样苦苦挣扎。

为了简单起见,我将在这里发布XML drawable:

window_background.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/status_bar_background"
          android:drawable="@color/main_app_color"/>

    <item android:id="@+id/content_window_background"
        android:drawable="@color/white"
        android:top="25dp"/>
</layer-list>

现在在我的主题中,我将此drawable分配为windowBackground

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="BaseAppTheme">
        <!-- Customize your theme here. -->
        <item name="android:windowTranslucentNavigation">@bool/translucent_nav_bar</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowBackground">@drawable/window_background</item>
    </style>
</resources>

答案 1 :(得分:4)

正如我已回复here,你可以看到我创建的一个完整的工作示例here(遗憾的是复制时间太长了,但请放心,回购无处可去!)。

哦,从Lollipop起,不需要任何技巧;)