透明状态栏和沉浸式状态栏

从Android4.4开始提供的沉浸式状态栏,让APP设计得更优美,很多APP都采用了。对于沉浸式状态栏的理解,很多人都表达不太一样,在这里根据自己的理解分为透明状态栏和沉浸式状态栏,分别对4.4和5.0进行适配。

布局

1

2

3

4

5

6

7

8

9

10
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@mipmap/bg"

android:scaleType="fitXY"/>

</RelativeLayout>

透明状态栏

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)支持4.4及以上版本,透明(4.4以上),半透明(5.0以上)),所以5.0以上全透明单独适配。

1

2

3

4

5

6

7
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

getWindow().setStatusBarColor(Color.TRANSPARENT);

}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

透明状态栏和导航栏

代码设置:

1

2

3

4

5

6

7

8

9

10
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

getWindow().setStatusBarColor(Color.TRANSPARENT);

getWindow().setNavigationBarColor(Color.TRANSPARENT);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

真正的沉浸式状态栏

状态栏和导航栏在4.4以上半透明,在5.0以上不透明。

1

2

3

4

5

6

7

8

9

10

11

12

public void (大专栏  透明状态栏和沉浸式状态栏"keyword">boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

if (hasFocus && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_FULLSCREEN

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

}

}

ToolBar和状态栏颜色一致

主要有两种情况:纯色和渐变色。

纯色

最简单的方式就是colorPrimary和colorPrimaryDark设为同一个颜色:

1

2

3

4

5

6
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<!-- Customize your theme here. -->

<item name="colorPrimary">@color/colorPrimary</item>

<item name="colorPrimaryDark">@color/colorPrimary</item>

<item name="colorAccent">@color/colorAccent</item>

</style

在代码中设置的话,SDK21及以上可以使用getWindow().setStatusBarColor()方法设置颜色,在SDK19及以上需要找到状态栏View,然后设置背景颜色

1
getWindow().setStatusBarColor(Color.TRANSPARENT);

还可将状态栏的颜色设为透明,然后将ToolBar的内容扩展到状态栏上,具体方法看下面渐变色的介绍

渐变色

要实现渐变色,ToolBar和状态栏的颜色不好单独设置,可以给ToolBar设置颜色后扩展到状态栏上。
渐变色可以使用shape创建,也可以用图片。使用gradient设置渐变色:

1

2

3

4

5

6

7
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient

android:angle="90"

android:startColor="#7f99a8"

android:endColor="#8ea8b7"

android:type="linear"/>

</shape>

toolbar.setFitsSystemWindows(true)将ToolBar的内容扩展到状态栏,让ToolBar的内容不与状态栏重叠。在代码中实现:

1

2

3

4

5

6

7

8

9
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

getWindow().setStatusBarColor(Color.TRANSPARENT);

toolbar.setFitsSystemWindows(true);

}else if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

toolbar.setFitsSystemWindows(true);

}

原文地址:https://www.cnblogs.com/lijianming180/p/12239885.html

时间: 2024-11-29 11:06:16

透明状态栏和沉浸式状态栏的相关文章

android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明

首先我要区分清楚沉浸式状态栏与变色状态栏. 沉浸式状态栏指的是,状态栏隐藏,在手指做了相关操作后,状态栏显示出来,例如视频播放器,在播放视频时是隐藏状态栏的,但是点击屏幕的时候,状态栏会显示出来,再例如文本阅读器,在阅读的时候是全屏的,然后从屏幕上方下滑或者下方上划,虚拟键和状态栏出现了,但却是直接覆盖在程序文字上的,这是所谓的沉浸式状态栏. 那么大家平时所说的状态栏与导航栏颜色相同,或者透明,指的是变色状态栏,或者透明状态栏. 对于这两个概念的理解,大家可以参考http://www.andro

Android 实现沉浸式状态栏

上一篇文章将Android 实现变色状态栏我们实现了变色的状态栏,也介绍了沉浸式状态栏和透明状态栏的区别,这篇文章我们实现沉浸式状态栏. 沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了.于是沉浸模式成了沉浸式状态栏. 我们先来看下具体的效果 开启沉浸模式后,状态栏消失,从顶部向下滑动,状态栏出现,退出沉浸模式,状态栏也出现了. 我们的代码基于前一篇文章.首先是两个开启沉浸模式和关闭沉浸模式的函数 @SuppressLint("NewApi"

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

沉浸式算是目前Android行业比较流行的一种App设计风格,将菜单栏北京设置为导航栏的颜色,感觉顶部状态栏像是被入侵了一样,因此称为沉浸式菜单栏.本文将介绍三种方式去实现沉浸式状态栏. Google从android kitkat(Android 4.4)开始, 给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了.首先看下效果 三种方式实现沉

对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)

/*对系统版本为4.4及以上的开启 透明状态栏和导航栏(即沉浸式状态栏)*/ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FL

android沉浸式状态栏实现

传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这样就在一定程度上牺牲了视觉宽度,界面面积变小. 沉浸模式的状态栏和主界面完全融为了一体,在设计上有不同的视觉感受. 我们先上两张图,很容易看出区别:        Android在4.4的时候增加了透明状态栏与导航栏的功能,依托于这个新特性,我们可以开始跟随潮流,实现Android的沉浸式状态栏 其实上图展示的这个关于界面的代码非常简单 /** * 关于界面 * * @author SuS * @time 2015.07.29

Android 沉浸式状态栏

效果图 android 5.0 以上 android 4.4 API 19 以上都是原生安卓系统的效果,具体到国内的各种各样改过的系统可能会有细微差别,测试过小米和华为的机器效果基本一样. 实现 1.修改主题属性 方法一: 在values-v19文件夹下声明AppTheme为透明状态栏,代码如下 1 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 2 <!-- C

81.Android之沉浸式状态栏攻略

转载:http://blog.csdn.net/lmj623565791/article/details/48649563/ 一.概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图: 关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 ?透明栏?(Translucent Bars)称作 ?沉浸式顶栏??上面了解了解,请勿指点我说的博文标题起得不对,thx. 恩,接下来正题. 首先只有大

沉浸式状态栏的最佳实现

最简洁的沉浸式状态栏的实现方式 1.在所需实现的Activity中加入代码 //透明状态栏 加入这行代码后,整个页面就会顶到状态栏的区域,占据状态栏. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 // getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 2.自定义标题栏,设置

Android App 沉浸式状态栏解决方案

伴随着 Android 5.0 发布的 Material Design,让 Android 应用告别了以前的工程师审美,迎来了全新的界面,灵动的交互,也让越来越多的 App 开始遵从 material design 设计原则,不再是以前拿着iOS设计稿,做着Android开发.本文就其中的沉浸式状态栏这一特性,描述其兼容到4.4的实现,以及一些使用中的小细节. 前言 在4.4之前状态栏一直是黑色的,在4.4中带来了 windowTranslucentStatus 这一特性,因此可以实现给状态栏设