成都网站建设设计

将想法与焦点和您一起共享

android状态栏透明,Android 透明度

如何将状态栏设置透明

Android4.4以后, 可以将状态栏设置为透明, 或者任意颜色 

创新互联2013年至今,是专业互联网技术服务公司,拥有项目网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元金秀做网站,已为上家服务,为金秀各地企业和个人服务,联系电话:13518219792

1. 全屏模式 

2. 着色模式 

在Android4.4之后提供了可以修改状态栏的属性接口后,我们可以直接通过style文件来配置状态栏, 但是需要注意的是, 为了兼容4.4以下的版本, 所以必须在配置多个API级别的values文件. 这里直接借参考文章中的图: 

最基本的在4.4版本之下会加载默认的values/styles.xml, 如果在4.4版本会加载 values-v19/styles.xml, 5.0以上加载 values-v21/styles.xml文件. 具体配置如下:

values/styles.xml

style name="ImageTranslucentTheme" parent="AppTheme"

!--在Android 4.4之前的版本上运行,直接跟随系统主题--/style123

values-v19/styles.xml

style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"

item name="android:windowTranslucentStatus"true/item

item name="android:windowTranslucentNavigation"true/item

/style1234

values-v21/styles.xml

style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"

item name="android:windowTranslucentStatus"false/item

item name="android:windowTranslucentNavigation"true/item

!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色--

item name="android:statusBarColor"@android:color/transparent/item

/style

Android 状态栏的设置

先看一下默认的情况:

蓝色一行是自定义的导航栏,

黑色的是自带的 ActionBar ,也就是我们说的标题栏。

首先一般都会选择去掉 ActionBar:

隐藏 actionbar 有很多种方法

这种方法是全局中隐藏了标题栏。

其实在我的手机更新系统之前,隐藏了 ActionBar 后,状态栏和自定义的导航栏颜色是相匹配的,不知道什么原因现在默认为灰色了。

上面使用的主题虽然隐藏了标题栏,但是和我们自定义的导航栏不搭,

这时候我们可以选择用自定义的主题(Theme),来改变状态栏:

在 values 下的 style.xml 中添加

或者在 onCreate 中:

上面两行一般不一起设置,二选一即可。

第一行设置导航栏为透明,第二行将导航栏隐藏。

不推荐第二种做法,如果一个 Activity 中设置了隐藏导航栏而另一个 Activity 没有,那两者切换的时候会不好看。

融合的效果:

状态栏和 app 顶部相融合了,如果标题栏是一张图片效果会更好。

这里还有一个问题,状态栏的文字和我们导航栏的文字重叠了,

我们可以选择在布局文件的根元素中添加:

让布局为状态栏留出空间,就不会出现上面这张被状态栏遮挡的情况。

如果像上面的例子是一样的纯色的标题栏,我们可以选择直接改变状态栏的颜色解决问题。

或者:

不显示时间、电量等信息和文字:

同要可以用修改 Theme 来实现:

或者在 OnCreat() 中加入,还是要注意加在 setContentView() 的前面

如果想让图片全屏要注意设置为:

android 沉浸式状态栏和透明状态栏的区别

注意!两种方法的区别:

第一种:为顶部栏跟随当前activity的布局文件的背景的颜色,使用方便,不过也有点问题就是,如果有底部虚拟导航键的话,导航键的背景跟顶部的颜色一样,比如:

第二种:是通过设置顶部栏的颜色来显示的,可以解决第一种的不足,比如:

第一种使用方法:

第一、首先在values、values-v19、values-v21文件夹下的styles.xml都设置一个 Translucent System Bar 风格的Theme,如下图:

values/style.xml:

style name="TranslucentTheme" parent="AppTheme"

!--在Android 4.4之前的版本上运行,直接跟随系统主题--

/style123

values-v19/style.xml:

style name="TranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"

item name="android:windowTranslucentStatus"true/item

item name="android:windowTranslucentNavigation"true/item

/style1234

values-v21/style.xml:

style name="TranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"

item name="android:windowTranslucentStatus"false/item

item name="android:windowTranslucentNavigation"true/item

!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色--

item name="android:statusBarColor"@android:color/transparent/item

/style123456

第二、在清单文件中配置需要沉浸式状态栏的activity加入theme

activity android:name=".ImageActivity" android:theme="@style/TranslucentTheme" /

activity android:name=".ColorActivity" android:theme="@style/TranslucentTheme" /12

第三、在Activity的布局文件中的跟布局加入“android:fitsSystemWindows=”true””,但是,这里需要区分一下,就是背景是图片还是纯色:

1.当背景为图片时,布局可以这么写:

?xml version="1.0" encoding="utf-8"?

RelativeLayout xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/imgs_bj"

android:fitsSystemWindows="true"

/RelativeLayout12345678

效果:

2.当背景为纯色,我们需要对布局划分一下,标题布局与内容布局,先把根布局背景设置成标题布局的背景色,然后标题背景色可以不用设置直接使用根布局的背景色,最后内容布局背景色设置为白色

?xml version="1.0" encoding="utf-8"?

LinearLayout xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/colorPrimary" //根布局背景设置成“标题布局”想要的颜色

android:fitsSystemWindows="true"

android:orientation="vertical"

!--标题布局--

RelativeLayout

android:layout_width="match_parent"

android:layout_height="55dp"

android:background="@color/color_31c27c"

TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="这是标题"

android:textColor="@android:color/white"

android:textSize="20sp" /

/RelativeLayout

!--内容布局--

LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/white" //内容区域背景设置成白色

android:gravity="center"

android:orientation="vertical"

Button

android:layout_marginTop="120dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="8dp"

android:text="显示信息"

android:onClick="showMsg"

/

/LinearLayout

/LinearLayout

Android 状态栏透明

前言:最近项目大量用到状态栏透明,网上也出现很多库可以直接拿来用,个人认为没有必要那么重引用到一个库(有木有同学和我有一样的想法),所以研究了一番,在此做个记录加强记忆也便后期查阅,如果无意中有幸能帮助到你那就再好不过了。

Android 从 4.4 (SDK 19) 开始支持 系统栏(状态栏+导航栏)半透明 效果:

翻译一下就是:

TranslucentDecor 主题设置了两个属性 windowTranslucentStatus 和 windowTranslucentNavigation 都为 true,前者指定状态栏半透明、后者指定导航栏半透明。

本文只探讨“状态栏” 。

默认样式是这样:

可见 Toolbar 和系统状态栏之间有明显的分界,我们要实现的效果是 Toolbar 和状态栏背景统一,看起来像是一个整体(自行脑补图片)。

按照官方文档,我们自定义主题:

对应的 Activity 引用该主题:

我看来看看效果:

虽然实现了半透明,但是布局被状态栏覆盖,接下来在布局文件中设置 fitSystemWindows (注意加到根节点 ConstraintLayout 上):

来看看效果:

虽然布局没有被状态栏覆盖,但是状态栏背景显然这不是我们想要的效果????

为什么状态栏会这么奇怪?

文章开头的定义中我们说了,布局文件会延伸到状态栏所占区域下, fitsSystemWindows 的作用是给对应的 View 增加 padding(这里以 ConstraintLayout 为例),目的是为了让其内容不被状态栏遮挡。

在我们的布局文件中 ConstraintLayout 没有设置背景(默认白色),所以状态栏默认的半透明背景色和 ConstraintLayout 的白色背景叠加,就变成了上图中的效果。

【总结】两个基本概念:

1、 windowTranslucentStatus 设置为true之后,状态栏默认是 半透明 的(4.4 是黑色到透明色渐变,5.0+ 是纯黑色半透明),和我们要求的 透明 相去甚远。更重要的是,布局会延伸到状态栏底下。

2、 android:fitsSystemWindows 简单理解 就是 View 为了适配系统状态栏和导航栏(不被遮挡)自动 增加 padding ,当然真正的实现原理比这复杂很多而且不同的 View 可以自定义实现方式。

所以,为了实现文章开头提出来的“状态栏透明”效果,我们需要处理:

设置 windowTranslucentStatus 为 true,让状态栏半透明。

在根节点设置 android:fitsSystemWindows 使其不被状态栏遮挡。

Android 4.4 暂时没有办法去掉状态栏的渐变。

Android 5.0+ 开始支持修改状态栏颜色,设置透明色即可把半透明去掉。

看看效果:

我们看到即使状态栏透明了,但是其底色是一片白,因为跟节点 ConstraintLayout 没有设置背景,大多情况下我们不会给整个跟节点设置颜色,可以考虑把 android:fitsSystemWindows 设置到子 View 上,本例中是 AppBarLayout (5.0+ 无效,只能显式给 AppBarLayout 加 padding,可以利用其背景色),实际项目中可灵活调整。

最终效果:

至此,完成状态栏透明效果,网上有很多库,实际上都是基于此原理,在此基础上再自定义 View 做为状态栏背景。

如何实现Android透明导航栏

android

kitkat

有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽。

android

4.4

提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟activity

一样的样式,形成一个完整的主题。

首先要打开activity的透明主题功能,可以把activity的主题设置继承*.TranslucentDecor

主题,然后设置android:windowTranslucentNavigation 或者android:windowTranslucentStatus的主题属性为true,又或者在activity的代码里面开启FLAG_TRANSLUCENT_NAVIGATION 或是 FLAG_TRANSLUCENT_STATUS的window窗口标识。由于透明主题不能在4.4以前的版本里面使用,所以系统样式跟以前没有区别,也就是看不到任何变化,这是一个兼容模式,这个模式可以兼容到api

10。

Android 4.4与Android 5.0的状态栏透明有何不同

 APP的状态栏在5.0下不是半透明的,只是把状态栏的颜色设置为比下面的ActionBar颜色深一点而已。因为5.0可以直接在Theme里面设置colorPrimary来指定状态栏颜色,而4.4是不行的。例如下面这样的就是用5.0的API设置的,很好分辨出来,就是看起来没有渐变色的。

 4.4虽然没有状态栏颜色设置的API,但可以用其他手段达到状态栏变色的效果。使用windowTranslucentStatus使状态栏变成全透明,同时会把布局扩充到全屏。这时候可以往window里的根布局添加一个高度与状态栏相等的View,然后给这个View设置背景色就可以了。

5.0下也完全是可以做成透明状态栏的。例如很多APP的抽屉拉出来后像下面的效果估计都是用ToolBar+windowTranslucentStatus做的。


名称栏目:android状态栏透明,Android 透明度
文章位置:http://chengdu.cdxwcx.cn/article/dsdcgsd.html