android 沉浸栏灰色,Android 沉浸栏实践——踩坑

当前开发环境:Android Studio 2.1.3,compileSdkVersion 24,buildToolsVersion "24.0.2",support:appcompat-v7:24.2.0

首先放个图,这就是我要做成的效果,Toolbar 和 Status Bar 一体共用背景图,实际上就是 Toolbar 的背景图延伸到 Status Bar。

d5c63f5970e8

效果图

先做一点点思考。我不打算修改 toolbar 的高度,设置为 android:layout_height="?attr/actionBarSize" 就好,否则 fitsSystemWindows 之后就需要设置 toolbar 高度为 25dp + 48dp = 73dp,同时其他的内容也会改变。那么,可以考虑在 AppBarLayout 中设置背景,然后让它侵入到状态栏去。现在 style.xml 看起来会是这样:

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

false

true

true

false

true

@android:color/transparent

false

true

toolbar 的布局文件差不多是这样子:

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:fitsSystemWindows="true"

android:paddingTop="@dimen/appbar_top_padding"

android:background="@drawable/bg_bar"

android:theme="@style/AppTheme.AppBarOverlay">

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

app:popupTheme="@style/AppTheme.PopupOverlay" />

主布局文件差不多是这样子:

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/root"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true"

tools:context="com.iamwent.tinter.MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior" >

android:id="@+id/tv_sdk"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="16dp"/>

然后你运行,发现 v21 的效果出来了,但是 v19 是这么个鬼!

d5c63f5970e8

v19效果

那个灰色条是什么?又是怎么来的呢?给跟布局设置背景色就可以发现,灰色条实际上是因为根布局侵入了状态栏,从我们给根布局设置的 android:fitsSystemWindows="true" 就是让布局上去

对于 android:windowTranslucentStatus文档上是这么说的:

By enabling translucent system bars, your layout will fill the area behind the system bars, so you must also enable fitsSystemWindows

for the portion of your layout that should not be covered by the system bars.

开启透明状态栏后,你的布局会填充状态栏下面的区域,所以你应当同时设置布局 fitsSystemWindows 以防止被状态栏覆盖。

而对于 android:fitsSystemWindows 文档又是这么说的:

Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.

配置 fitsSystemWindows 后,系统就会调整 view 的 padding 以给 system windows 留出空间。

解决办法是根布局不设置 android:fitsSystemWindows,然后在代码中判断,在 v21 以上手动设置这一属性,代码如下:

private void setTranslucentStatusBar() {

int sdkInt = Build.VERSION.SDK_INT;

if (sdkInt >= Build.VERSION_CODES.LOLLIPOP) {

setTranslucentStatusBarLollipop();

}

}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

private void setTranslucentStatusBarLollipop() {

((ViewGroup) getWindow().findViewById(android.R.id.content)).getChildAt(0).setFitsSystemWindows(true);

}

昨晚吐槽的时候,有位朋友提醒了我,这个值也可以用 style 的方式设置:

true

我脑袋一抽,觉得以下这个方式可能也可以:

false

true

坑位零

在上面的配置中涉及到了多个属性的设置,建议修改为不同的值,看看它们会造成什么样的效果。

android:statusBarColor

android:windowDrawsSystemBarBackgrounds

坑位一

d5c63f5970e8

奇怪的间隔

眼尖的人可能在最前面的效果图就看到了,那就是在 v23 上这个显示系统版本的 TextView 有一个奇怪的 margin,而且很巧合的就是 25dp!最后我发现,是由于给主布局的 RelativeLayout 设置了 app:layout_behavior="@string/appbar_scrolling_view_behavior" 造成的。解决办法是在 v23 上给 RelativeLayout 设置 android:layout_marginTop="-25dp",可以在 dimens 中做。

坑位二

在修改的过程中我还发现一个奇怪的问题,status bar 是个灰色的条,超级奇怪!最后对比发现是 AppTheme.NoActionBar 采用继承 Theme.AppCompat.Light.NoActionBar 的方式,解决办法是不继承 parent,采用手动配置。

d5c63f5970e8

Theme 造成的怪现象

结语

我是要给一个半成品的 APP 做适配,所以先单独做了一个 demo 实现想要的——后来踩到的坑证明我这个决定是多么的正确!特别是坑位三。所以一旦出现莫名其妙的错误,我就对照 demo 的配置一个个地方去排除。

另外,多试试各种配置的作用,明白它们影响的是什么区域,碰到问题才好修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android实现文本输入,Android实现智能提示的文本输入框AutoCompleteTextView

今天我们要讲一个十分简单的内容,就是一个安卓控件的使用,用法很简单,但是很常用的一个。这里我用两种不同的写法来处理。当然,无论用哪一种写法,效果都是一样的。我们先来看效果图。要实现这种效果十分简单。需要一个…

ibatis的简介与初步搭建应用

一、ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师。 这里讲下自己的使用体会。之前自己学过Hibernate,是看尚学堂的视频教学的,看完以后发现Hibernate体系中的内容真的很多,什么N-N关联、HSQL、缓存管理等等&#xff…

VOIP,PSTN,ISDN

近来在电视、杂志特集等展露头脚的「IP电话」,因其通话费用低廉而有口皆碑。IP电话利用的IP网络在互联网的世界里是众所周知的。互联网被认为基本上是免费的网络。接下来以此开放的技术和构想作为基础而登场的就是IP电话。IP电话与构成 所谓的IP电话 所谓的IP电话就…

svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复

合并步骤:(1)先切换到分支;(2)svn merge trunk . (3)svn sw trunk (4)svn merge --reintegrate branch . svn merge http://59.251.189.152:8989/svn/ron/tru…

计算机组装与维护模拟测试题三答案,春季高考信息技术模拟题3(计算机组装与维修部分含答案)...

36.计算机硬件系统的核心部件是A.主板B.CPUC.内存D.硬盘 37.北桥芯片的功能不包括A.对CPU类型和主频的支持B.对ECC纠错的支持C.对内存类型和最大容量的支持D.对USB接口的支持 38.操作…

wince6下usb摄像头(UVC)使用指南

转自:http://hi.baidu.com/cahbb/blog/item/6d76093498fe0790a61e120e.html 在搭好了wince6的开发环境之后,下一步试验一下wince6下使用摄像头的方法。搜集了不少资料,从中学习了很多有用的东西,在这给记录下来,方便…

使用SqlCommandBuilder

使用命令构造器添加行 View Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient;namespace PersistAddsBuilder {class Program{static void Main(string[] args){string connStri…

Asterisk权威指南/第二章 Asterisk架构

Asterisk和其他传统的PBX完全不同,因为Asterisk的拨号计划以同样的方式处理所有的入局信道(incoming channels)。 传统的PBX在逻辑上区分工作站信道(连接电话机)和电话局信道(连接到外部世界)。…

x-lite asterisk 成功实现视频通话

首先,在此感谢asterisk协会的各位大牛们,没有他们的帮助,我也不可能在这么短的时间内实现,x-liteasterisk音视频通话。在此将实现的过程记录如下,分享给asterisk的爱好者们。 1. 修改asterisk服务器的sip.conf文件&…

axure 链接html文件,通过WuliHub免费托管原型Axure HTML文件

产品经理常用的工具就是Axure,通过Axure把想法转化成包含交互的原型线框图。在工作中,我们用HTML文件传递不仅会遇到某些浏览器无法打开的问题,而且没有办法及时更新内容。所以,介绍一种简单的并且免费的方式来方便管理HTML原型&a…

Asterisk SIP连通测试(X-Lite eyebeam)

Step1:设置 sip.conf rootUbuntu:/etc/asterisk# vim sip.conf [general] //类似与全局变量 context default srvlookup yes //DNS SRV记录查询 [111] secretaaa //密码&#xf…

html多出的空白页怎么删除,word多出一页空白页怎么删除,这4个方法总有一个能解决,真实挂机网赚项目...

信赖大多数人都碰到过这样的难题,在编辑Word文档的时刻,是不是在中心或者是最后一页,莫名其妙的泛起空白页,而且这个空白页怎么删都删不掉。不要着急,今天就给人人分享4种简朴又好用的解决方式,总有一种能让…

linq to json for sl

一.Linq to JSON是用来干什么的?Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部. 二.创建JSON数组和对象在进行Linq to…

编程是一种艺术创作

软件正在吞噬世界 “软件正在吞噬世界。”——马克 安德森 马克 • 安德森 在新一轮的信息技术革命中,我们已经见证,软件对社会生产的方方面面,产生了深刻的影响,它们侵入并颠覆了已经建立起来的行业架构。越来越多的大企业和行业…

loss值多少才算收敛_一个家庭一年要存多少钱才算正常?国家统计局给出“答案”...

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。免责声明:本文来源于网络,如有侵权请联系作者删除。“手里有粮&…

郑州升达经贸管理学院计算机专业学费,郑州升达经贸管理学院学费

郑州升达经贸管理学院学费2020-07-10 13:17:19文/叶丹2020年郑州升达经贸管理学院文科类本科专业学费15000元/年;郑州升达经贸管理学院理科类本科专业学费16000元/年。一般情况下,艺术类专业学费比普通专业高一些。郑州升达经贸管理学院依据省(市区)教育…

不愿意和别人打交道_参加完孩子学校的运动会,宝妈吐槽贫富圈子差距大,不适合打交道...

文|文儿我有一个发小,蛮有钱的,前两天参加完孩子的运动会,气呼呼地说“穷人就爱斤斤计较,千万不要轻易地跟他们打交道”。这是怎么回事呢?原来,我的这位发小,今年孩子转学上了小学二年级&#x…

html 遍历div内check,vue+element中checkbox 实现遍历分组全选

1、html部分style"margin-left: 30px":indeterminate"item.isIndeterminate"v-model"item.isCheck"change"checkTitle(item.isCheck, index)">全选>v-model"item.checkedData"change"checkItem(item.checkedData…

homepod换wifi网络_如何实现短租网络自由,不必换房断网

对于在异地工作的人来说,租房一直是头疼的问题,要避开黑中介,房租不能太贵,还要离公司近,最好单间或者舍友不能太奇葩,要满足以上条件实在是太难了。其实最核心的问题是房租,押一付三&#xff0…

如何升级浏览器_手把手教你申请IOS14 Beta升级方法

就在最近苹果公司正式开放了IOS14 Public Beta 2还不了解IOS14的小伙伴参考一只废材:WWDC2020 之 IOS14 篇(内含升级方法和个人体验参考)​zhuanlan.zhihu.com本期废材就来教大家如何申请升级操作方法简单易懂又官方本方法每次发布版本更新都…