Android使用新api设置应用状态栏颜色和图标字体深浅模式

Android使用新API设置状态栏颜色和字体图标深浅模式

1、以下两种旧的使用方式已经过期 在api30 以后不生效。
//方式一、过期API设置状态栏字体颜色-源码重以及标识为Deprecated,使用同样提示过期
@Deprecated
public void setSystemUiVisibility(int visibility) {
     throw new RuntimeException("Stub!");
}

//方式二、过期API设置状态栏字体颜色,getWindowInsetsController()
val controller1 = ViewCompat.getWindowInsetsController(rootView)
controller1?.isAppearanceLightStatusBars = true

查看过期的ViewCompat.getWindowInsetsController()方法源码

image-20241014090838498

建议使用WindowCompat. getInsetsController()方法代替ViewCompat.getWindowInsetsController()

2、以下最新的使用模式,兼容低版本。
//设置状态栏字体颜色,在getInsetsController()方法中传入window,和根布局view
val controller = WindowCompat. getInsetsController(window,rootView)
controller.isAppearanceLightStatusBars = false

//设置状态栏颜色
window.statusBarColor =ContextCompat.getColor(this, R.color.my_light_primary)
3、完整代码如下:
package com.jbk.ladybirddemo

import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        val rootView:View = findViewById(R.id.main)
        //监听应用视窗变化,根据系统栏(包括状态栏和导航栏)的实际大小调整布局的内边距
        ViewCompat.setOnApplyWindowInsetsListener(rootView) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        //设置状态栏字体颜色,在getInsetsController()方法中传入window,和根布局view
        val controller = WindowCompat. getInsetsController(window,rootView)
        controller.isAppearanceLightStatusBars = false

        //设置状态栏颜色
        window.statusBarColor =ContextCompat.getColor(this, R.color.my_light_primary)
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值