2017-03-22 55 views
1

我试图以编程方式更改StatusBar颜色,但没有成功。我正在使用MaterialDrawer库来创建导航抽屉。无法使用MaterialDrawer库更改StatusBar颜色

试过型动物的解决方案我在互联网上找到,但没有一个人的工作,状态栏始终显示primaryDark

编程尝试:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       Window window = getWindow(); 
       window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
       window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
       window.setStatusBarColor(Color.BLUE); 
} 

与主题也试过:

if (dark) 
    setTheme(R.style.AppTheme_Dark_NoActionBar); 
else 
    setTheme(R.style.AppTheme_NoActionBar); 


<style name="AppTheme.Dark.NoActionBar" parent="MaterialDrawerTheme"> 
    <item name="android:colorPrimary" tools:targetApi="lollipop">#ffffff</item> 
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">#cfcfcf</item> 
    <item name="android:statusBarColor">#cfcfcf</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:windowTranslucentStatus">true</item> 
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_black_1000</item> 
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle.Black</item> 
    <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeDark</item> 
    <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeDark</item> 
</style> 

<style name="AppTheme.NoActionBar" parent="AppTheme"> 
     <item name="windowActionBar">false</item> 
     <item name="android:colorAccent" tools:targetApi="lollipop">@color/primary</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:statusBarColor">@color/colorPrimaryDark</item> 
     <item name="android:datePickerDialogTheme">@style/DatePickerDialogThemeLight</item> 
     <item name="android:timePickerDialogTheme">@style/DatePickerDialogThemeLight</item> 
    </style> 

<style name="AppTheme" parent="MaterialDrawerTheme.Light"> 
    <item name="android:colorPrimary" tools:targetApi="lollipop">@color/colorPrimary</item> 
    <item name="android:colorPrimaryDark" tools:targetApi="lollipop">@color/colorPrimaryDark 
    </item> 
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/md_blue_300</item> 
    <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item> 
    <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle</item> 
</style> 

最后尝试使用这段代码的MaterialDrawer库:

drawer.getDrawerLayout().setStatusBarBackgroundColor(color); 

drawerDrawerBuilder的结果。该应用程序有2个原色,取决于用户放入登录/注册的一些变量。这种颜色是蓝色和白色。该应用程序很好,除了StatusBar只与primaryDark着色,即使我使用我上面发布的代码。我可以改变颜色的唯一方式是修改colorPrimary或​​者把这个放入颜色:

<color name="materialize_primary_dark">@color/md_red_500</color> 

但作为primaryDark做它改变了颜色,我必须将它更改为白色的白模式和蓝色的蓝模式。

感谢。

+0

删除茨艾伦部分 “window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);” 也许它的作品! –

+0

尝试过,但颜色不变。我认为是从MaterialDrawer覆盖它,但我不知道。 – VictorBG

回答

2

只要您的ViewfitsSystemWindows标志)的根目录中有一个DrawerLayout,StatusBar颜色将由此视图"scrim"管理。

所以你的情况,你可以做以下调整StatusBar的动态颜色:

public void setStatusBarColor(@ColorInt int color){ 
    drawer.getDrawerLayout().setStatusBarBackgroundColor(color); 
} 
+0

解决了再次重写所有样式和MainActivity的错误。最后没有找到错误但使用这个答案,重写完所有后,我终于可以改变颜色了。 – VictorBG

1

你不需要库使用此样式,V21

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:windowTranslucentStatus">true</item> 
</style> 

抽屉布局

<FrameLayout 
     android:id="@+id/frame_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/colorPrimary" 
     android:fitsSystemWindows="true" /><--This is mandatory 

</android.support.v4.widget.DrawerLayout> 

或者,你可以参考在第一个解决方案 这里我接受的答案Android DrawerLayout (with NavigationView) behind status bar

+0

问题不在于图书馆。它是关于StatusBar的。这是由DrawerLayout(它也是NavigationView的基础)处理的 – mikepenz

+0

你是否试过我的代码? –

+0

看到这个http://stackoverflow.com/questions/41501857/android-drawerlayout-with-navigationview-behind-status-bar/41502238#41502238 –