iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android沉浸式状态栏实现示例
  • 612
分享到

Android沉浸式状态栏实现示例

示例状态栏Android 2022-06-06 04:06:05 612人浏览 八月长安
摘要

应用市场上App越来越多的出现沉浸式状态栏的设计(如下图所示)状态栏和导航栏具有相同的颜色。Android在4.4开始对于该种效果的支持,而在4.4之下,状态栏只是黑框,无法控

应用市场上App越来越多的出现沉浸式状态栏的设计(如下图所示)状态栏和导航栏具有相同的颜色。Android在4.4开始对于该种效果的支持,而在4.4之下,状态栏只是黑框,无法控制。同时在4.4和5.0及其之上的版本对该种效果的支持又有所差异,因此要实现该种效果,可以将4.4归为一类,5.0及其之上归为一类。接下来,我们将一步步来在4.4和5.0及其之上来实现如下所示效果。

导航栏问题

在Android中,顶部导航栏目前常用的两种实现方式,一个是通过Toolbar,一个是通过自定义View的方式来实现。两种方式各有利弊。Toolbar为官方指定规范,开发者使用更方便,但可拓展性差,对于一些特殊的展示效果无法实现,而通过自定义方式的方式,可以支持更多展示效果,但却需要我们写更多的代码。两种方式在实现状态栏沉浸上也有所差别。

去掉Title

Toolbar默认主题会具有一个title,当我们使用Toolbar的时候,而没有去掉title,应用则会crash,报出如下所示错误。

因此在使用Toolbar 的时候,我们需要style中添加如下属性配置


<item name="windowNoTitle">true</item>

当然我们也可以通过代码动态去掉title,但当我们的主题从Theme.AppCompat作为父类继承的时候,通过代码并不可以去掉title。

自定义导航栏

当我们未设置

windowNoTitle
属性的时候,在导航栏之上有title。显然和我们要实现导航栏的沉浸式有所违背,因此实现对于导航栏的沉浸,

<item name="windowNoTitle">true</item>
该配置是必不可少的。

设置状态栏透明

去掉title之后,是否我们就可以实现上述的效果了呢?

这个时候,我们发现状态栏还是黑色,并没有沉浸,需要我们将状态栏设置为透明。


<item name="android:windowTranslucentStatus">true</item>

该属性只有在在4.4和高于4.4版本上可以进行该属性的配置,但是在更低版本上则无法使用。配置该属性之后,执行效果如下图所示。

解决导航栏上移问题

这个时候,Toolbar被整体上移了,导致其部分功能也进入了状态栏之下,包括导航栏的内容也到了状态栏位置之中,显然这是不符合我们最初的要求的。如何解决这个问题?我们在Toolbar中添加fitSystemwindows属性,即可使得toolbar的上部空出一个高度,使得Toolbar内容部分脱离状态栏。


 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>

得到我们最终想要得到的效果

自定义导航栏与之实现类似。

fitsSystemWindows属性

前面对Toolbar的设置是在Toolbar中添加的

fitSystemWindows
属性,那么当我们将其属性添加到Toolbar所在的最外层的布局会怎么样呢?


<RelativeLayout
  xmlns:android="Http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_toolbar"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitsSystemWindows="true"
tools:context="com.example.netease.toolbardemo.activity.ToolbarActivity">
  <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>
</RelativeLayout>

执行之后,可以看到和之前未设置状态栏透明时的效果相同。

那么这个fitSystemWindows工作的原理是什么呢?通过上述实验,不难发现,对于沉浸状态栏的控制,该属性起到了一个很关键的作用。

接下来通过一个实验来验证下,该属性所起的作用,在Toolbar所在的布局中,在布局的底部添加一个Button.


<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>
  <Button
    android:text="Test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:layout_alignParentBottom="true"/>

当我们将该属性设置到按钮上,又会发生什么呢?


<Button
    android:text="Test"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:layout_alignParentBottom="true"/>

通过比较可以很明显的看出,设置了

 fitsSystemWindows
属性的View在其上部被设置了一个padding。根据之前做的实验,我们可以知道当我们设置了窗口状态栏透明之后,整个内容视图会向上移动了一个状态栏的高度,而当前为该View增加的padding的大小是不是和其高度相同呢?


 Button btn = (Button) findViewById(R.id.test_btn);
 Log.i("padding", btn.getPaddingTop()+"");
 Rect frame = new Rect();
 getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
 Log.i("height", frame.top+"");

获取按钮的padding高度和状态栏的高度,我们可以得到如下日志

通过实验我们可以得出结论,

 fitSystemWindows
属性会对所设置的View增加一个top padding,因此当我们在实现让导航栏沉浸的时候,设置窗口状态栏的透明会使得视图整体上移,而借助
 fitSystemWindows
属性的功能,为视图中最顶部的View设置一个和状态栏高度相同的padding,使得导航栏不会被顶到状态栏内。

当我们在一个视图中,多个View设置该属性时,发现只有第一个设置该属性的View会起作用,在视图布局上,自上而下的第一个View其作用。层级上则为最顶级的View上首先其作用。因此其功能归纳为:

为设置该属性的View增加一个和状态栏高度相同的toppadding 当视图中有多个View被设置了该属性,那么只布局上最顶部的View起作用

5.0及其以上

至此,我们可以完美的实现一个状态栏的沉浸,上述的实现是在Android 4.4版本上,在视图的最上部,会有一个黑色渐变的阴影,而在5.0设备上的展示效果如下所示,在状态栏上整个都会有一个阴影。当然不同厂家对此也有自己的一些优化,比如魅族在4.4上是不具有阴影的。

对于5.0及其之上,官方提供了对状态栏颜色控制的相应api,我们可以通过代码来控制状态栏的颜色,实现如下效果。

实现代码


 if(Build.VERSioN.SDK_INT >= 21) {
      Window window = getWindow();
      //取消设置透明状态栏,使 ContentView 内容不再沉浸到状态栏下
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
      //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
      //设置状态栏颜色
      window.setStatusBarColor(getResources().getColor(R.color.yx_red));
    }

据此可以看出,当我们在5.0及其之上的实现中,可以不用进行状态栏透明的设置和

 fitSystemWindows
属性的设置,直接通过代码来控制,但为了适应4.4版本,建议在代码中仍然按之前的方式实现,如果想在5.0及其高版本中实现去阴影,再手动在代码中控制。

您可能感兴趣的文章:Android之沉浸式状态栏的实现方法、状态栏透明Android UI体验之全屏沉浸式透明状态栏样式Android设置透明状态栏和透明导航栏Android 快速实现状态栏透明样式的示例代码


--结束END--

本文标题: Android沉浸式状态栏实现示例

本文链接: https://www.lsjlt.com/news/22239.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现ImmersionBar沉浸式状态栏
    (一)效果图 (二)实现步骤: 1、在build.gradle中加上 implementation 'com.gyf.barlibrary:barlibrary:2.3.0' 2、设置页面为全屏 将上图中的 改为 3、 加入以下代...
    99+
    2023-08-31
    android android studio gradle
  • android沉浸式状态栏怎么实现
    要实现Android沉浸式状态栏,可以按照以下步骤进行操作:1. 在styles.xml文件中定义一个没有ActionBar的主题,...
    99+
    2023-09-27
    android
  • Android 实现沉浸式状态栏(包含顶部栏吸顶Layout CoordinatorLayout实现沉浸式状态栏)
    前言 Android状态栏默认是固定的黑底白字,这肯定是不被伟大的设计师所喜爱的,更有甚者,某些时候设计希望内容能够延伸到状态栏上部(例如顶部是大图的情况)。所幸的是随着Android版本的迭代,开发者对状态栏等控件有了更多的控制。Andr...
    99+
    2023-09-12
    android
  • Android中怎么实现沉浸式状态栏
    这篇文章给大家介绍Android中怎么实现沉浸式状态栏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在布局文件中第一个控件(一般是imageview或者textview)中添加两个属性。<!--沉浸式-->...
    99+
    2023-05-30
    android
  • Android沉浸式状态栏设计的实例代码
    本文介绍了android沉浸式状态栏,分享给大家,希望对大家有帮助一、概述现在主流的App设计风格很多都用到了Materail Design,今天我们就来简单的实现一下改变状态栏颜色、让状态栏透明这两种效果。二、实现状态栏设置颜色我们写一个...
    99+
    2023-05-30
    android 沉浸式状态栏 roi
  • Android 详解沉浸式状态栏的实现流程
    目录去掉标题栏效果引入依赖沉浸状态栏颜色沉浸状态栏图片Android—沉浸式状态栏 我们的征程是星辰大海,而非人间烟尘 去掉标题栏 首先去掉对应主题下面的Android自带的Act...
    99+
    2024-04-02
  • Android应用怎么实现一个沉浸式状态栏
    这期内容当中小编将会给大家带来有关Android应用怎么实现一个沉浸式状态栏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。效果。导航栏问题在Android中,顶部导航栏目前常用的两种实现方式,一个是通过T...
    99+
    2023-05-31
    android roi
  • 【UI篇】Android 沉浸式状态栏的那些事
    目录 window.decorView.systemUiVisibility 的参数常量1.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:(>=api16)2.View.SYSTEM_UI_FLAG_FUL...
    99+
    2023-08-17
    android ui kotlin
  • Android沉浸式状态栏的实现流程是怎样的
    本篇内容主要讲解“Android沉浸式状态栏的实现流程是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android沉浸式状态栏的实现流程是怎样的”吧!Android—沉浸式状态栏我们的征...
    99+
    2023-06-25
  • 如何在Android应用中实现一个沉浸式状态栏效果
    这篇文章将为大家详细讲解有关如何在Android应用中实现一个沉浸式状态栏效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实现方法如下: @TargetApi(Build.VERSION...
    99+
    2023-05-31
    android roi
  • Android 开发中怎么改变沉浸式状态栏的颜色
    这篇文章给大家介绍Android 开发中怎么改变沉浸式状态栏的颜色,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这个是基于SystemBarTintManager更改的增加一个方法:用于更改MIUIV6系统上的状态栏字...
    99+
    2023-05-31
    android roi
  • 史上最完美的Android沉浸式状态导航栏攻略
    前言 最近我在小破站开发一款新App,叫高能链。我是一个完美主义者,所以不管对架构还是UI,我都是比较抠细节的,在状态栏和导航栏沉浸式这一块,我还是踩了挺多坑,费了挺多精力的。这次我将我踩坑,适配各机型总结出来的史上最完美的Android沉...
    99+
    2023-08-17
    android ui
  • Android沉浸式实现兼容的示例分析
    这篇文章主要介绍Android沉浸式实现兼容的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先介绍下,什么是沉浸式状态栏?沉浸式,要求在应用中Android状态栏(StatusBar)与标题栏(ActionB...
    99+
    2023-05-30
    android
  • 一个Activity中多个Fragment实现沉浸式状态栏的解决方法
    项目中遇到一个问题:一个Activity有多个Fragment,每个Fragment的沉浸式状态栏不一样,有的是红色,有的是黑色,有的是一张图片(图片的一部分在状态栏中显示),并且要要兼顾虚拟按键(常说的导航栏)遮盖住布局导致自己布局中的某...
    99+
    2023-05-31
    fragment 沉浸式 状态栏
  • 如何解决Android 沉浸式状态栏和华为虚拟按键冲突问题
    这篇文章主要介绍如何解决Android 沉浸式状态栏和华为虚拟按键冲突问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先看下实现的效果图:这是我自己的手机,OnePlus 3T 7.1.1版本(免费广告,没给我钱的...
    99+
    2023-05-30
    android
  • Android开发中怎么实现一个沉浸式通知栏
    Android开发中怎么实现一个沉浸式通知栏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。①DrawerLayout+Toolbar添加依赖库(谷歌提供)compile&nbs...
    99+
    2023-05-31
    android roi
  • Android Studio 透明状态栏的实现示例
        最近正在学习使用Android Studio,发现默认的Hello World程序界面和我们平时使用的APP界面有很大的不同,多了Ac...
    99+
    2024-04-02
  • vue项目中如何使用Hbuilder打包app 设置沉浸式状态栏
    这篇文章给大家分享的是有关vue项目中如何使用Hbuilder打包app 设置沉浸式状态栏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用 Hbuilder新建好移动app项目...
    99+
    2024-04-02
  • Android实现状态栏(statusbar)渐变效果的示例
    前言qq最近更新搞了渐变式状态栏.然后...新需求就是要加这个.唉先来张效果图:常见的方式:设置Theme,状态栏透明. <item name="android:windowTranslucentStatus">true<...
    99+
    2023-05-30
    android 状态栏 渐变
  • android状态栏显示短信怎么实现
    要在Android的状态栏中显示短信,你需要创建一个BroadcastReceiver来接收短信,并在接收到短信时将其显示在状态栏上...
    99+
    2023-08-12
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作