12

我有一个布局,用于更新状态栏的背景颜色根据colorPrimaryDark如何获取状态栏的背景颜色显示colorPrimaryDark

当布局的根布局是CoordinatorLayout时,这很有效,但是当我将它切换到LinearLayout时,状态栏背景不再更新。

下面粘贴布局和屏幕截图的源代码。还列出了一个正常工作的布局示例。

谢谢!

layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".churches.ChurchesActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 
    <android.support.design.widget.CoordinatorLayout 
     android:id="@+id/coordinatorLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <FrameLayout 
      android:id="@+id/contentFrame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 
    </android.support.design.widget.CoordinatorLayout> 

</LinearLayout> 

styles.xml

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

风格,v21.xml

<resources> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:statusBarColor">@android:color/transparent</item> 
</style> 

状态栏不colorPrimaryDark

Status Bar is not colorPrimaryDark

状态栏colorPrimaryDark

Status Bar is colorPrimaryDark

+0

向我们展示您的风格。xml –

回答

16

在发布的款式,v21.xml我发现安卓statusBarColor设置为透明:

<item name="android:statusBarColor">@android:color/transparent</item> 

更改安卓statusBarColor到colorPrimaryDark固定它。谢谢!

<item name="android:statusBarColor">@color/colorPrimaryDark</item> 

不知道为什么statusBarColor发挥了作用切换到从CoordinatorLayout一个的LinearLayout后。谢谢!

+1

CoordinatorLayout在系统窗口中有顶部插入时绘制状态栏背景。默认情况下,它使用'colorPrimaryDark'作为drawable来绘制。 – Karakuri

+0

不知道我会怎么想出来的!谢谢你的澄清! – dazza5000

+0

不适合我.... – GvSharma

0

尝试添加该机器人:fitsSystemWindows = “真”属性的线性布局和看到的。

+0

我尝试了这个,但由于某些原因,android:fitsSystemWindows =“true”在应用于LinearLayout时并不具有与应用于CoordinateLayout时相同的效果。好建议!谢谢! – dazza5000

+0

@Shiva,这不是正确的答案,设置'android:fitsSystemWindows =“true”'只会让'LinearLayout'添加一些paddingTop,它不会让状态栏上的'LinearLayout'绘制颜色。 – neevek

0

在您的主题中添加<item name="android:navigationBarColor">?attr/colorPrimaryDark</item>或以编程方式呼叫window.setNavigationBarColor(@ColorInt int color)。但是,请注意由于Android棒棒糖(API 21),这意味着该navigationBarColornavigationBarColor引入不支持时API < 21.

1

尝试这在活动前设置内容视图

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().setStatusBarColor(getFactorColor(getResources().getColor(R.color.action_bar_color), 0.4f)); 
} 

其中getFactorColor方法是

public static int getFactorColor(int color, float factor) { 
    float[] hsv = new float[3]; 
    Color.colorToHSV(color, hsv); 
    hsv[2] *= factor; 
    color = Color.HSVToColor(hsv); 
    return color; 
} 
0

如果尝试完所有这些之后你不会得到。只需使缓存无效并重新启动项目即可。这肯定会起作用。

相关问题