首先将styles文件的AppTheme改为无标题栏 即:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

一、Android

1.状态栏背景图片的延伸:首先设置实现方法 fullScreen()

* 通过设置全屏,设置状态栏透明 private void fullScreen(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色 Window window = activity.getWindow(); View decorView = window.getDecorView(); //两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间 int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); } else { Window window = activity.getWindow(); WindowManager.LayoutParams attributes = window.getAttributes(); int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; attributes.flags |= flagTranslucentStatus; window.setAttributes(attributes);

再次在Activity中调用该方法

2.状态栏背景颜色的设置: 首先创建实现方法 initSystemBar()

* 状态栏 *themeBg:颜色值(在color设置直接调用即可) @SuppressLint("InlinedApi") public void initSystemBar(Context mContext, int themeBg) { if (Build.VERSION.SDK_INT >= 21) { Window window = getWindow(); //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //设置状态栏颜色 window.setStatusBarColor(ContextCompat.getColor(mContext, themeBg)); //状态栏颜色接近于白色,文字图标变成黑色 View decor = window.getDecorView(); int ui = decor.getSystemUiVisibility(); //light --> a|=b的意思就是把a和b按位或然后赋值给a, 按位或的意思就是先把a和b都换成2进制,然后用或操作,相当于a=a|b ui = ui | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; decor.setSystemUiVisibility(ui);

再次在Activity的onCreate方法中调用

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    initSystemBar(MainActivity2.this ,R.color.colorAccent);

二、Kotlin

2.1.设置状态栏背景图片

* 沉浸式状态栏 @SuppressLint("ObsoleteSdkInt") fun initState() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0 全透明实现 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE) window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) window.setStatusBarColor(Color.TRANSPARENT) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //4.4 全透明状态栏 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

再次该方法需要在setContentView()方法之前调用(同上)

2.2.设置状态栏背景颜色方法

fun initSystemBar(isLight: Boolean, themeBg: Int) {
    if (Build.VERSION.SDK_INT >= 21) {
        val window = window
        //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        //设置状态栏颜色
        if (isLight) {
            window.statusBarColor = ContextCompat.getColor(mContext, themeBg)
        } else {
            window.statusBarColor = ContextCompat.getColor(mContext, R.color.transparent)
        //状态栏颜色接近于白色,文字图标变成黑色
        val decor = window.decorView
        var ui = decor.systemUiVisibility
        ui = if (isLight) {
            //light --> a|=b的意思就是把a和b按位或然后赋值给a,   按位或的意思就是先把a和b都换成2进制,然后用或操作,相当于a=a|b
            ui or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        } else {
            //dark  --> &是位运算里面,与运算,  a&=b相当于 a = a&b,  ~非运算符
            ui and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
        decor.systemUiVisibility = ui

再次调用方式同上

这样我们就可以完成各种状态栏的设置了,可以很好地匹配我们不同Activity了。对你有所帮助请点赞!!!