Android开发:如何用setStatusBarColor设置R.drawable.gradient渐变状态栏
错误原因
getWindow().setStatusBarColor() 方法接收的参数是 ARGB颜色整型值,并不支持直接传入Drawable资源ID,你传入R.drawable.gradient本质是传入了一个资源的数字标识,系统会把这个ID当成颜色值解析,自然无法得到预期的渐变效果。
可行解决方法
原生系统没有提供直接给状态栏设置Drawable的单行API,你可以把原有逻辑封装为工具方法,后续只需要一行调用即可实现需求:
1. 封装工具方法
import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.view.Window; import android.view.WindowManager; import androidx.core.content.ContextCompat; public class StatusBarUtil { public static void setGradientStatusBar(Activity activity, int drawableResId) { Window window = activity.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); Drawable background = ContextCompat.getDrawable(activity, drawableResId); window.setBackgroundDrawable(background); } }
2. 单行调用实现效果
在需要设置渐变状态栏的Activity中直接调用即可:
StatusBarUtil.setGradientStatusBar(this, R.drawable.gradient);
补充说明
- 上述方案适用API 21及以上系统,更低版本系统本身不支持修改状态栏颜色,需要额外适配
- 如果你的渐变效果需要仅作用于状态栏区域、不影响页面整体背景,可以在布局顶部增加一个和状态栏等高的View,单独给这个View设置渐变Drawable,不需要修改Window属性
内容的提问来源于stack exchange,提问作者Jarosław Król
相关产品推荐
相关产品推荐

