Android 设置沉浸式状态栏

news/2025/2/28 20:16:15/文章来源:https://www.cnblogs.com/stars-one/p/18605454

原文地址: 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=falsesetBgAndAdjustStatusBar()}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.CollapsingToolbarLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"><!-- 里面再套个布局,可以是其他的,但得设置fitsSystemWindows属性 --><androidx.constraintlayout.widget.ConstraintLayoutandroid:fitsSystemWindows="true"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 要设置的背景图片--><ImageViewandroid: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.ConstraintLayoutandroid: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
}

参考

  • 一个Android沉浸式状态栏上的黑科技_郭霖 android edge-CSDN博客
  • Display content edge-to-edge in your app | Views | Android Developers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/852005.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作CASE_1 Hold Lot 已经Release但是Hold记录为空

HOLD LOT已经Release,但是对应HOLD记录的Release时间是空的说明: DWT_HOLD_LOT 的Hold Lot Hold Event(Hold,EditHoldComment,Release),且每个Event都为一条记录,每条记录都有对应的RELEASE_EVENT_TIME,HOLD_SYS_ID,HOLD_RELEASE HOLD LOT已经Release,但是对应HOLD记录的…

数字加密的基本原理和典型应用场景

一、数字加密的概念 1.1 加密概念 数据加密技术是指一条消息通过加密密钥和加密函数转换成无意义的密文,接收者通过解密函数和解密密钥将密文还原成明文。这样,我们就可以保护数据不被非法窃取和读取。提高计算机安全水平的基础是掌握数据加密的本质,数据加密由明文(未加密报…

obj文件如何转换成3DTiles文件?用这款软件帮你轻松搞定

概述 在三维数据处理中,OBJ文件是一种常见的三维模型文件格式,而3DTiles作为Cesium等三维平台广泛使用的数据格式,凭借其高效的流式加载能力,成为三维可视化领域的标配。如果你正面临将OBJ文件转换为3DTiles文件的挑战,不妨试试GISBox免费GIS工具箱。这款强大的工具不仅功…

数字图像处理 (四)

图像压缩 原因:减少表示图像所需数据量,去除多余数据 图像冗余(表达数据的信息多余)编码冗余 编码符号数多余实际所需 像素间冗余 领域像素间相关性 心里视觉冗余 视觉感知的重要程度信源编码:通过减少冗余数据来实现数据压缩的过程客观保真度准则-----图像质量(相似度)…

转载:【AI系统】感知量化训练 QAT

本文将会介绍感知量化训练(QAT)流程,这是一种在训练期间模拟量化操作的方法,用于减少将神经网络模型从 FP32 精度量化到 INT8 时的精度损失。QAT 通过在模型中插入伪量化节点(FakeQuant)来模拟量化误差,并在训练过程中最小化这些误差,最终得到一个适应量化环境的模型。…

基于AI的图片背景移除工具 - 无需联网+永久免费 (附下载地址)

背景介绍​ 继上一篇文章发布以来(在浏览器里就可以运行的本地AI模型 - 一键去除图片背景AI_基于webgpu的去背景ai演示), 有不少朋友反馈虽然一键去除图片背景工具很好用, 但对于一些小白用户来说, 自己启动本地服务器太过复杂, 并且需要远程加载模型资源, 导致很容易载入失败.…

Patroni中对主备切换、故障转移和命令行的流程整理

Patroni中对主备切换、故障转移和命令行的流程整理 1. 主备切换 主备切换(Switchover)是高可用性(High Availability,HA)系统中的一个重要操作,常见于数据库集群或分布式系统中。在主备架构中,通常有一个主节点和一个或多个备节点,备节点会复制主节点的数据并保持同步。…

动态协作的终极指南:文档管理工具如何发挥最大效能

在当今数字化工作环境中,文档管理工具已从单纯的文件存储和共享工具,进化为团队协作的关键支柱。特别是在跨部门、跨地域的动态协作场景中,高效的文档管理不仅能提升工作效率,更是组织竞争力的重要体现。 动态协作:未来工作方式的核心 传统的文档管理模式常常以静态为主,…

20222318 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 2.实验过程 2.1 简单应用SET工具建立冒名网站 SET工具,全称Social-Engineer Toolkit,是一款专门用于进行社会工程学攻击的开源工具集。 在…

记一次生产环境内存暴涨分析(工具:vs2022)

前情提要:由于负责的业务主要使用时间为凌晨,上周连续几天半夜程序卡死了,正跟周公下棋呢,一个电话打过来,前几次都是重启iis后解决了,最后实在忍不了了,半夜起来以后分析了一波,终于找到问题。 程序为:.net 4.6,部署在windows server 2016上,设置了32位为true 1、发…

Go编译为可执行程序

Go语言编译 在项目根目录(main函数所在的目录)打开终端,运行下面的语句进行编译go build .注意后面有个 空格 和 . 符号 交叉编译 在Windows x86环境开发,但需要将程序部署到 Linux ARM64环境下时 就需要使用Go的交叉编译功能 Go提供环境变量 ( 详见 http://go.dev/wiki/ …

53.Redis的使用

(五十三)Redis的使用1:Redis入门概念1:Redis运行过程,也就是读写过程都是基于内存实现的key/value存储。对比与memcached而言,会基于异步方式(快照)同步到文件系统,实现数据的持久性存储。单一进程响应用户的所有的请求,具有主从架构。2:单台服务器可以响应的100万级别…