我正在开发一个Android应用程序。在我的应用程序中,我根据来自服务器的颜色代码设置操作栏颜色。设置背景颜色很好并且正常工作。但我也想根据动作栏的颜色代码更改状态栏的颜色。我想使颜色变暗并将其设置在状态栏上,如下面的屏幕截图所示。
我在活动中设置状态栏颜色
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));
}
}
}
这就是我得到的:
正如您所看到的,状态栏颜色没有变化。如何更改状态栏颜色使操作栏颜色变暗?
答案 0 :(得分:2)
我也试图达到相同的效果,为状态栏动态生成深色,所以请看看我是如何做到的。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getDarkColor(Color.GREEN, 0.7));
}
暗色生成方法(当值较低时,您获得的颜色较暗)。
public int getDarkColor(int color, double value) {
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
return Color.rgb((int) (r * value), (int) (g * value), (int) (b * value));
}
答案 1 :(得分:0)
使用此代码更改状态栏颜色(比工具栏颜色更深)
factor=0.8f;
int a = Color.alpha(toolbarcolor);
int r = Math.round(Color.red(toolbarcolor) * factor);
int g = Math.round(Color.green(toolbarcolor) * factor);
int b = Math.round(Color.blue(toolbarcolor) * factor);
int statusColor=Color.argb(a,
Math.min(r, 255),
Math.min(g, 255),
Math.min(b, 255));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = MainActivity.this.getWindow();
window.setStatusBarColor(statusColor);
}
`