Erlo

Android 设置沉浸式状态栏

2024-12-13 18:29:24 发布   38 浏览  
页面报错/反馈
收藏 点赞

原文地址: Android 设置沉浸式状态栏-Stars-One的杂货小窝

标题所说的沉浸式状态栏实际就是底部有背景图,而状态栏是沉浸效果(可以在背景图上面展示的),如下面的这种效果:

官方API实现

官方新版本出了个api,名为enableEdgeToEdge(),方便我们使用

这种方法主要适用Activity的整个背景图是固定资源(drawable或mipmap里),且是填充全屏的情况

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
		
        enableEdgeToEdge()
        setContentView(R.layout.activity_album_info)

        //设置状态栏显示亮色(白色)的图标和文字
        WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars=false
		
		setBgAndAdjustStatusBar()
    }

    private fun setBgAndAdjustStatusBar() {
        //适配刘海屏等
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
			//这里设置图片整个图片资源
            v.setBackgroundResource(R.drawable.my_img_4)
            insets
        }
    }

而xml布局中没有其他东西了 ,如下代码所示:



	

通过fitsystem属性实现

之前郭霖大佬讲过这个,主要是CoordinatorLayout里去设置这个属性,而用其他layout设置的的话会无效(具体这里不再赘述,详见下面参考链接里的文章)

这个方法适用要灵活控制图片宽高的(主要是可以在布局里放一个imageview,且可以控制图片宽高),如下图UI给的设计稿:

或者可以改成滚动后显示toolbar,具体代码示例参考Android CoordinatorLayout使用示例记录-Stars-One的杂货小窝

布局代码稍微有些多:




	
    

		
        

           
            

        
    

	
    
		
        
    


Activity代码:

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)

	enableEdgeToEdge()
	setContentView(R.layout.activity_album_info)
  
	//设置状态栏显示亮色(白色)的图标和文字
	WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars=false
}

参考


提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认