android透明状态栏和沉浸式的实现

author author     2023-03-13     163

关键词:


Android透明状态栏和沉浸式的实现

1.什么是沉浸式

根据百度百科上的定义,沉浸式就是要给用户提供完全沉浸的体验,使用户有一种置身于虚拟世界之中的感觉。

其真正含义并不是大家所想的那样,对屏幕状态栏进行一些操作,甚至有人把透明状态栏叫做沉浸式

然后我们再来看一下爱奇艺的沉浸式实现:

Android透明状态栏和沉浸式的实现_沉浸式模式

爱奇艺将整个屏幕作为影视的展示区,用户在看电影的时候眼中就只会有电影的内容,这样就不会被其他一些无关的东西所分心。

这才是沉浸式模式的真正含义,而所谓的什么沉浸式状态栏纯粹就是在瞎叫,完全都没搞懂“沉浸式” 这三个字是什么意思。

不过虽然听上去好像是很高大上的沉浸式效果,实际看上去貌似就是将内容全屏化了而已嘛。没错,Android沉浸式模式的本质就是全屏化,不过我们今天的内容并不仅限于此,因为还要实现饿了么那样的状态栏效果。那么下面我们就开始来一步步学习吧。

2.隐藏状态栏

一个Android应用程序的界面上其实是有很多系统元素的,观察下图:

Android透明状态栏和沉浸式的实现_Android_02

可以看到,有状态栏、ActionBar、导航栏等。而打造沉浸式模式的用户体验,就是要将这些系统元素全部隐藏,只留下主体内容部分。

接下来说一下透明状态栏的实现,也就是一般被人叫错的沉浸式状态栏

// 透明化状态栏
if (Build.VERSION.SDK_INT >= 21)
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);

// 去掉标题栏
getSupportActionBar().hide();

直接把这些代码复制到setContentView(R.layout.activity_main)方法之后就可以实现.

效果如下:

Android透明状态栏和沉浸式的实现_透明状态栏_03

真正的沉浸式模式

虽说沉浸式导航栏这个东西是被很多人误叫的一种称呼,但沉浸式模式的确是存在的。那么我们如何才能实现像爱奇艺那样的沉浸式模式呢?

首先你应该确定自己是否真的需要这个功能,因为除了像游戏或者视频软件这类特殊的应用,大多数的应用程序都是用不到沉浸式模式的。

当你确定要使用沉浸式模式,那么只需要重写Activity的onWindowFocusChanged()方法,然后加入如下逻辑即可:

public class MainActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


@Override
public void onWindowFocusChanged(boolean hasFocus)
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT >= 19)
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);



如果你需要实现沉浸式模式,直接将上面的代码复制过去就行了。

需要注意的是,只有在Android 4.4及以上系统才支持沉浸式模式,因此这里也是加入了if判断。

为了让我们的界面看上去更像是爱奇艺,这里我将MainActivity设置成了横屏模式:

<activity android:name=".MainActivity" 
android:screenOrientation="landscape">
...
</activity>

这样我们就实现类似于爱奇艺的沉浸式模式效果了,如下图所示:

Android透明状态栏和沉浸式的实现_Android_04

可以看到,界面默认情况下是全屏的,状态栏和导航栏都不会显示。而当我们需要用到状态栏或导航栏时,只需要在屏幕顶部向下拉,或者在屏幕右侧向左拉,状态栏和导航栏就会显示出来,此时界面上任何元素的显示或大小都不会受影响。过一段时间后如果没有任何操作,状态栏和导航栏又会自动隐藏起来,重新回到全屏状态。

这就是最标准的沉浸式模式。

以上总结呢,是我读了郭霖大神的一篇博客后的心得,其中用来好多大神的话和图片,如果你要看郭神的原文的



沉浸式状态栏的三种实现方式

沉浸式算是目前Android行业比较流行的一种App设计风格,将菜单栏北京设置为导航栏的颜色,感觉顶部状态栏像是被入侵了一样,因此称为沉浸式菜单栏。本文将介绍三种方式去实现沉浸式状态栏。  Google从androidkitkat(Androi... 查看详情

android实现沉浸式全屏(代码片段)

前言本文总结Android实现沉浸式全屏的实现方式。实现沉浸式全屏在一些需要全屏显示的场景下,比如玩游戏、看横屏视频的时候,内容全屏,占满窗口的体验会让用户更加沉浸到对内容的消费中,带来好的用户体验。沉浸式显... 查看详情

Android透明状态栏和动作栏

】Android透明状态栏和动作栏【英文标题】:Androidtransparentstatusbarandactionbar【发布时间】:2015-07-0614:34:04【问题描述】:我已经对这个主题进行了一些研究,但我找不到完整的解决方案,因此,我一步一步地尝试和错误,我终于... 查看详情

一步两步带你实现android沉浸式设计(代码片段)

...种是沉浸式模式,一种是沉浸式状态栏,Google从Android4.4开始,给我们开发者提供了一套透明的系统UI样式给状态栏和导航栏,这样完美的玩法简直和IOS系统媲美了。Part1、沉浸式模式    publicvoidtoggle(Viewview)intopti... 查看详情

管理systemui(状态栏+导航栏)

...文主要讲解怎样去调暗或者隐藏系统栏,根据不同的Android版本去创建一个沉浸式的用户体验,与此同时依旧保留对系统栏的便捷访问。调暗系统栏调暗系统栏只支持在Android4.0(APIlevel14)和以上。在4.0以前版本,Android不... 查看详情

管理systemui(状态栏+导航栏)

...文主要讲解怎样去调暗或者隐藏系统栏,根据不同的Android版本去创建一个沉浸式的用户体验,与此同时依旧保留对系统栏的便捷访问。调暗系统栏调暗系统栏只支持在Android4.0(APIlevel14)和以上。在4.0以前版本,Android不... 查看详情

android沉浸式(透明)状态栏细研-超级细还附demo(代码片段)

前言在Android4.4中引入了沉浸模式的功能,但这个版本非真正的沉浸模式,应该说是透明模式。Android5.0以后才可以在系统层面实现真正的沉浸式状态栏。沉浸式状态栏是为了与当前使用的App页面风格统一,不会显的那... 查看详情

棒棒糖上完全透明的状态栏和导航栏

...间】:2015-05-1802:37:45【问题描述】:我正在尝试制作一个android启动器。我想实现一个完全透明的状态栏和导航栏,这里是我的主题xml文件。<resources><stylename="Theme"parent="android:Th 查看详情

video标签沉浸式播放解决方案

“沉浸播放式”这个概念是我从Android开发里面的沉浸式引申过来的一个概念,沉浸式其实就是隐藏页面顶部的statusbar和底部的navigationbar之后呈现出来的页面,一般用户很容易把沉浸式状态栏和透明化状态栏混为一谈࿰... 查看详情

总结系列-一文搞懂沉浸式状态栏

...f0c;并没有沉浸式状态栏这一概念,只有沉浸式模式和透明状态栏的概念。(注:此篇非原理,非解决方案封装类,偏于实用与查阅对比,底部参考链接有GitHub上的轮子供参考)  实现沉浸式状态栏主要跟以下四个Api相关:View#setSystemUi... 查看详情

android沉浸式(透明)状态栏细研-超级细还附demo(代码片段)

前言在Android4.4中引入了沉浸模式的功能,但这个版本非真正的沉浸模式,应该说是透明模式。Android5.0以后才可以在系统层面实现真正的沉浸式状态栏。沉浸式状态栏是为了与当前使用的App页面风格统一,不会显的那... 查看详情

android沉浸式状态栏的实现(代码片段)

...0c;第一个浮现在脑海里的词就是“碎片化”。碎片化是让Android开发者很头疼的问题,相信没有哪位开发者会不喜欢“writeonce,runanywhere”的感觉,碎片化让我们不得不耗费精力去校验代码在各个系统版本、各个机型上是否... 查看详情

android沉浸式状态栏变色状态栏透明状态栏修改状态栏颜色及透明(代码片段)

...栏。对于这两个概念的理解,大家可以参考http://www.androidchina.net/3520.html。v19(4.4)以后开始支持android:windowTranslucentStatus属性,透明状态栏,而v21(5.0)以后出现变色状态栏,可以自由设置状态栏颜... 查看详情

小米手机手势提示线怎么改沉浸

...2.3解决方案如果不希望app的内容被遮挡,可以给view设置android:fitsSystemWindows=”true”,设置之后,系统会给该view自网页转APP动加上paddingTop和paddingBottomapp生成器。参考代码和效果如下:2.4适用的场景举例当页面具有复杂的背景或纹... 查看详情

在 Swift iOS 8 中设置透明导航栏和状态栏的图像底图

】在SwiftiOS8中设置透明导航栏和状态栏的图像底图【英文标题】:SetImageUnderlayofTransparentNavigationBarandStatusBarinSwiftiOS8【发布时间】:2015-07-1406:23:50【问题描述】:我是iOSswift开发的新手,我遇到了一个问题。我想设置透明导航栏... 查看详情

几行代码让状态栏随心所欲

自从android4.4开始,android手机状态栏再也不是一成黑的时代,之前叫做变色龙,miui6发布会把他叫做沉浸式,之后大家就自然而然的接受了沉浸式这个名称,其实实际应该叫做TranslucentBar,即为透明状态栏。??沉浸式实现原理其实... 查看详情

flutter沉浸式透明状态栏|flutter自定义凸起bottomappbar导航(代码片段)

前言如下图:状态栏是指android手机顶部显示手机状态信息的位置。android自4.4开始新加入透明状态栏功能,状态栏可以自定义颜色背景,使titleBar能够和状态栏融为一体,增加沉浸感。 如上图:Flutter状态栏默... 查看详情

ionic3沉浸式状态栏

...己结合了一些网上大佬的方法。照着改就行了\\platforms\\android\\app\\src\\main\\java\\io\\ionic\\starter\\MainActivity.java\\platforms\\android\\app\\src\\main\\java\\org\\apache\\cordova\\statusbar\\StatusBar.java 查看详情