【发布时间】:2016-10-16 12:23:51
【问题描述】:
我正在开发一个 Android 应用程序。在我的应用程序中,我根据来自服务器的颜色代码设置操作栏颜色。设置背景颜色很好并且可以工作。但我也想根据动作栏的颜色代码来改变状态栏的颜色。我想加深颜色并将其设置在状态栏上,如下图所示。
我在activity中这样设置状态栏颜色
private void setStatusBarColor()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
window.setStatusBarColor(getResources().getColor(R.color.statusBarColor));
}
}
但这次我需要动态更改颜色。我用模拟颜色值测试了但没有工作。
在活动的onCreate方法中
teamColorCode = "#EB6343";
if(teamColorCode!=null && !teamColorCode.isEmpty())
{
int color = Color.parseColor(teamColorCode);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
//set for action bar
float[] hsv = new float[3];
Color.colorToHSV(color,hsv);
hsv[2] *= 0.8f; // value component
color = Color.HSVToColor(hsv);
setStatusBarColor(color);
}
如您所见,我为 teamColorCode 变量分配了一个颜色代码值。然后我尝试使该颜色变暗并设置状态栏的颜色。这就是我设置状态栏颜色的方式。
private void setStatusBarColor(int color)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
if(color>0)
{
window.setStatusBarColor(color);
}
else{
window.setStatusBarColor(getResources().getColor(R.color.statusBarColor));
}
}
}
这是我得到的:
如您所见,状态栏颜色没有变化。如何更改状态栏颜色使操作栏颜色变暗?
【问题讨论】:
-
您是否尝试为 StatusBar 设置与 ActionBar 相同的颜色?如果是的话,你可以这样做。检查material.google.com/style/color.html#color-color-palette,ActionBar 设置 500 和 StatusBar 设置 700 颜色。
-
没有。加深操作栏的颜色。然后设置为状态栏。
-
我的颜色代码是动态的。来自服务器。
标签: android android-actionbar statusbar android-statusbar