首页 > 其他分享 >Android 设置沉浸式状态栏

Android 设置沉浸式状态栏

时间:2024-12-13 17:42:14浏览次数:6  
标签:沉浸 状态栏 systemBars window 设置 Android

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

<?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
}

参考

标签:沉浸,状态栏,systemBars,window,设置,Android
From: https://www.cnblogs.com/stars-one/p/18605454

相关文章

  • Android13开机向导
    文章目录前言需求-场景第三方资料说明需求思路按照平台思路从配置上去feature换个思路,去feature。SimMissingActivity判断跳过逻辑SetupWizardUtils判断SIM、hasSystemFeatureFEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManagerhasSy......
  • android studio配置protobuf 3
    1、在app的build.gradle文件开头添加buildscript{repositories{gradlePluginPortal()}dependencies{classpath'com.google.protobuf:protobuf-gradle-plugin:0.8.19'}}2、在proto文件所在的build.gradle文件中的plugins项中添加id'com.......
  • android studio配置apt 使用Annotation
    1、生成类的Processor必须在类型为“JavaorKotlinLibrary"的module下,如果没有,则需要新建一个[原因是需要引入[javax.annotation.processing]包,这个包是jre下面的,只有在这种类型的Module下才能引入。 2、实现AbstractProcessor的方法,代码示例如下:@AutoService(Process......
  • Android原生方法几行代码实现对人像进行切割,Android图片人像分离,可更换背景或者透明背
    前言调研了好几天,网上大多数是需要收费的API接口,在准备付费购买接口的时候,一篇文章给我带来了希望Android------开源的Modnet算法实现抠图和更换背景再次感谢作者的分享效果图原作者的代码是无法切出透明背景的,我的项目需求是上传图片识别人像,更换背景变成景点,纯......
  • Android Studio 引用framework.jar方法
    参考文章:[Android][踩坑]AndroidStudio导入framework.jar的各种坑_android_RyanZHENG-开放原子开发者工作坊本文只对以下环境进行说明,其他环境参考上面文章开发环境:平台:RK3576 Android14JDK版本:JDK17AS版本:Jellyfish |2023.3.1Patch1gradle版本:8.0.1步骤:1、找......
  • RK3588主板/开发板Android12系统APK签名文件生成的方法,干货满满
    本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-I......
  • Android 网络框架的封装(暂定)
    参考一下,不能直接运行的工具类importandroid.app.Application;importandroid.content.Context;importandroid.text.TextUtils;importjava.io.File;importjava.io.InputStream;importjava.net.Proxy;importjava.util.concurrent.Executor;importjava.util.concur......
  • Android可长按拖拽item的列表
    Android可长按拖拽item的列表仿支付宝拖拽效果,长按拖拽item列表,自动换位一、思路:自定义控件DragGridView二、效果图:看视频更直观点:Android轮子-可长按拖拽item的列表三、关键代码:packagecom.cong.mydraglistapp.drag;importandroid.animation.Animator;......
  • android 12 (1、屏幕旋转默认开启 (2、Font size 保持微 Largest 选项设置 (3、Font s
    —a/alps/frameworks/base/core/java/android/content/res/Configuration.java+++b/alps/frameworks/base/core/java/android/content/res/Configuration.java@@-1422,7+1422,7@@publicfinalclassConfigurationimplementsParcelable,Comparable<Configuration......
  • Android 13 源码编译
    前言全局说明一、说明1.1环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)1.2清华源AOSP清华源:https://mirrors.tuna.tsinghua.edu.cn/AOSP帮助:https://mirrors.tuna.tsi......