Android 设置沉浸式状态栏
本文为作者原创,允许转载,不过请在文章开头明显处注明链接和出处!!! 谢谢配合~
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/18605454
本篇大约有3717个字,阅读预计需要4.65分钟
标题所说的沉浸式状态栏实际就是底部有背景图,而状态栏是沉浸效果(可以在背景图上面展示的),如下面的这种效果:
官方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
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
2023-12-13 Android MaterialButtonToggleGroup使用
2022-12-13 Spring Boot命令指定环境启动jar包
2017-12-13 Android破解学习之路(三)——Android游戏 切水果破解