如何将状态栏背景设置为渐变颜色或android中的drawable

我想将状态栏背景设置为渐变主题,状态栏和动作栏颜色应该是相同的渐变可绘制,根据文档,我们可以使用API​​级别21及以上的状态栏将颜色设置为使用

@color/colorPrimary 

但我正在寻找类似的东西

 @drawable/myDrawable 

我见过使用的例子

  false false 

但在那种情况下状态栏和操作栏重叠(使用fitSystemWindow = true但仍未解决)也尝试使用https://github.com/jgilfelt/SystemBarTint这个库,但仍然没有运气

先谢谢你!!

在此处输入图像描述 对于想要将渐变颜色设置为状态栏背景的人,可以在setContentView()之前在活动中使用以下方法

  @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void setStatusBarGradiant(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); Drawable background = activity.getResources().getDrawable(R.drawable.gradient_theme); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(activity.getResources().getColor(android.R.color.transparent)); window.setNavigationBarColor(activity.getResources().getColor(android.R.color.transparent)); window.setBackgroundDrawable(background); } } 

感谢每一位人士的帮助

编辑

如果上面的代码不起作用,请尝试在styles.xml添加:

  

由于不推荐使用getColor和kotlin语言,因此对sushant的答案进行了扩展。

 @RequiresApi(Build.VERSION_CODES.LOLLIPOP) fun backGroundColor() { window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent) window.navigationBarColor = ContextCompat.getColor(this, android.R.color.transparent) window.setBackgroundDrawableResource(R.drawable.ic_drawable_vertical_background) } 

我们的想法是创建透明状态栏并为整个窗口设置背景,这也将覆盖相同背景中的状态栏。

第1步:创建一个状态栏类,如下所示

 public class StatusBarView extends View { private int mStatusBarHeight; public StatusBarView(Context context) { this(context, null); } public StatusBarView(Context context, AttributeSet attrs) { super(context, attrs); if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } } @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ mStatusBarHeight = insets.getSystemWindowInsetTop(); return insets.consumeSystemWindowInsets(); } return insets; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),mStatusBarHeight); } } 

第2步:创建一个可绘制的渐变,如下所示

 < ?xml version="1.0" encoding="utf-8"?>    

Step3:创建如下布局

 < ?xml version="1.0" encoding="utf-8"?>     

Step4:为活动创建样式

   

我在这里使用了这个链接上的答案。 如果你想显示操作栏,我添加了下一个代码,使其成为透明背景

 final ActionBar ab = getSupportActionBar(); if (ab != null) { Drawable gradientBG = getResources().getDrawable( R.drawable.bg_transperant); ab.setBackgroundDrawable(gradientBG); } 

然后在bg_gradient.xml中

 < ?xml version="1.0" encoding="utf-8"?>