当前位置: 首页 > article >正文

Android 设置沉浸式状态栏

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

官方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布局中没有其他东西了 ,如下代码所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="atute.yelike.micplay.activity.MainActivity">
	
</androidx.constraintlayout.widget.ConstraintLayout >

通过fitsystem属性实现

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

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

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

布局代码稍微有些多:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".activity.AlbumInfoActivity">

	<!-- 要设置的背景图片,放CollapsingToolbarLayout布局里 -->
    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

		<!-- 里面再套个布局,可以是其他的,但得设置fitsSystemWindows属性 -->
        <androidx.constraintlayout.widget.ConstraintLayout
            android:fitsSystemWindows="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

           <!-- 要设置的背景图片-->
            <ImageView
                android:fitsSystemWindows="true"
                android:id="@+id/ivBgCover"
                android:scaleType="fitXY"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                app:layout_constraintDimensionRatio="1:1"
                android:clipToPadding="false"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent" />

        </androidx.constraintlayout.widget.ConstraintLayout>
    </com.google.android.material.appbar.CollapsingToolbarLayout>

	<!-- 内容布局,可以是其他的布局 -->
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
		<!-- 真正的内容 -->
        
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Activity代码:

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

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

关注灵活就业新业态,关注公账号:贤才宝(贤才宝https://www.51xcbw.com) 


http://www.kler.cn/a/445972.html

相关文章:

  • webGL硬核知识:图形渲染管渲染流程,各个阶段对应的API调用方式
  • 国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案
  • Spring Cloud Gateway 源码
  • W25Q128读写实验(一)
  • 【系统】Windows11更新解决办法,一键暂停
  • Python国内10个镜像源-地址汇总以及测评
  • shell7
  • 【C++】刷题强训(day16)--字符串替换、神奇数、DNA序列
  • MyBatis-Plus中isNull与SQL语法详解:处理空值的正确姿势
  • CICD篇之通过Jenkins中书写pipeline构建编译打包发布流程
  • Power Automate 简介
  • 【bash】linux中打包某个可执行文件及其依赖文件
  • Python实现应用最小二乘法融合SVM-LSTM回归模型电力负荷预测项目实战
  • AWR microwave office 仿真学习(二)使用多层结构天线/超表面的S参数确定层间距
  • jdk17用jmap -hea打印JVM堆信息报错Cannot connect to core dump or remote debug server
  • 岁末回望,追梦远方
  • tauri2中创建新的窗口方式,和tauri1不一样了哦
  • 【HTML】Shadow DOM
  • 对uniApp 组件 picker-view 的二次封装,实现日期,时间、自定义数据滚动选择,容易扩展
  • C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容
  • 使用Unity做一个3D吃豆人小游戏
  • 【人工智能】物联网技术及其应用
  • 电商店铺数据集成到金蝶云星辰V2的实践经验分享
  • k8s-1.28.1证书更新到100年-cenots7.9
  • 卷积神经网络-填充+步长
  • 差分数组的使用