使用新的Lollipop v21 API,我尝试使用setStatusBarBackgroundColor
设置半透明状态栏的背景颜色,但使用R.attr.colorPrimary
会导致颜色错误(它使用紫色代替浅蓝色我指定为colorPrimary)。
如何正确设置我的主要颜色,以便R.attr.colorPrimary
引用我在styles.xml
中设置的colorPrimary?
这是有问题的代码:
nav_drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
nav_drawer.setStatusBarBackgroundColor(R.attr.colorPrimary);
这是我styles.xml
中的相关部分:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Use Lollipop's animated hamburger-arrow as drawer indicator -->
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<!-- Action Mode's bar overlays the app bar instead of pushing it down-->
<item name="windowActionModeOverlay">true</item>
<!-- Status Bar is translucent -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
<!-- Colors -->
<item name="colorPrimary">@color/lightblue</item>
</style>
是的,我实际上是在我的清单中使用这个AppTheme:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
答案 0 :(得分:3)
每setStatusBarBackgroundColor documentation:
参数
颜色用作背景绘图的颜色,以0xAARRGGBB格式绘制状态栏后面。
但是你传递了一个属性id。您需要解码属性才能获得实际颜色:
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
final int color = typedValue.data;
nav_drawer.setStatusBarBackgroundColor(color);