首页
学习
活动
专区
圈层
工具
发布

全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

可以这么理解:状态栏与导航栏拥有自己独立的窗口,而且这两个窗口的优先级较高,会悬浮在所有窗口之上,可以把系统自身的状态栏与导航栏看做全透明的,之所有会有背景颜色,是因为下层显示界面在被覆盖的区域添加了颜色...先看下关键点1跟2 ,这里是根据SystemUI的配置决定是否显示状态栏背景颜色,如果状态栏都不显示,那就没必要显示背景色了,其次,如果状态栏显示,但背景是透明色,也没必要添加背景颜色,即不满足(color...最后看一下translucentFlag,默认情况下,状态栏背景色与translucent半透明效果互斥,半透明就统一用半透明颜色,不会再添加额外颜色。...、或者半透明、或者颜色为透明色,那同样也不需要为导航栏添加背景色,具体不再重复。...实际应用中经常将状态栏或者导航栏设置为透明色:即想要沉浸式体验,这个时候背景颜色View就不在被绘制,但是,默认样式下DecorView的内容绘制区域并未扩展到状态栏、或者导航栏下面(TRANSLUCENT

6.6K40

沉浸式管理:让你的APP更优雅

沉浸式实现原理其实是使整个activity布局延伸到整个屏幕,然后使状态栏变成透明色,有些手机会有导航栏,同样也可以把导航栏变成透明色,这样会使一些app更加美观。 先看两个概念 状态栏 ?...修改状态栏字体颜色为深色 ? ? 设置状态栏和导航栏透明度 ? ? ? 解决EditText和软键盘的问题 ? ?...android 5.0以上核心代码 Android自5.0起,为我们提供了设置状态栏和导航栏颜色的API,我们可以自己设置状态栏和导航栏的颜色。...,设置导航栏颜色的时候,底部布局会被导航栏遮住,除此之外还有一个小问题就是当用户设置状态栏为透明色的时候,不能时刻改变bar的颜色值,are you kidding?...原理如此,发现SystemBarTint库的实现就是在状态栏和导航栏的位置自定义了可以改变背景颜色的view,然后通过window.getDecorView()得到根布局,把刚才创建的view添加进去,

2.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 沉浸式解析和轮子使用

    并且在 Android4.4-Android5.0 是没有提供改变状态颜色的属性,所以只能通过新增加一个假的状态栏方式改变背景颜色。...所以Android5.0以上可以设置状态栏和导航栏背景颜色,但还不能改变状态栏和导航栏图标和字色。...绘制,绘制透明背景的系统 bar(状态栏和导航栏),然后用 getStatusBarColor() 和 getNavigationBarColor() 的颜色填充相应的区域。... 1.2.2 图片延伸到状态栏 在 Android 5.0 使图片延伸到状态栏,只需设置 windowTranslucentStatus,将 statusBarColor 设置为透明即可...(R.color.colorPrimary) //同时自定义状态栏和导航栏颜色,不写默认状态栏为透明色,导航栏为黑色 .statusBarAlpha(0.3f) //状态栏透明度

    4.1K10

    React-Native组件之 Navigator和NavigatorIOS

    对象参数调用; navigationBar view 导航的可选组件导航标题栏,需要设置左按钮,右按钮和标题属性。...NavigatorIOS 属性 对于NavigatorIOS而言,主要有以下属性: 属性 说明 barTintColor 导航条的背景颜色 itemWrapperStyle 导航器中的组件的默认属性。...一个常见的用途是设置所有页面的背景颜色 navigationBarHidden 布尔值,决定导航栏是否隐藏 shadowHidden 布尔值,决定是否要隐藏1像素的阴影 tintColor 导航栏上按钮的颜色...titleTextColor 导航器标题的文字颜色 translucent 布尔值,决定导航条是否半透明(注:当不半透明时页面会向下移动导航栏等高的距离,以防止内容被遮盖) interactivePopGestureEnabled...导航栏的功能,React Native提供了NavigationBar(类似于Android的Toolbar)。

    6.1K70

    关于 Android 中的各种 Bar 和“透明状态栏”的一些知识

    关于沉浸式和透明式概念说明 在谷歌官方中: 在 Android 4.4 Google 引入了可以在阅读电子书、玩游戏、看电影时支持全屏模式(Immersive Mode 沉浸模式),同时也支持更改修改状态栏的颜色...View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:作用使 UI 布局延伸到导航栏,全屏显示,导航栏消失。...修改状态栏颜色 Android 5.0 (API 21) 后支持直接修改状态栏的颜色,在 Android 4.4(API 19)之前是不允许操作状态栏的,也就是说在 Android 4.4 之前,我们是没法对状态栏进行任何操作的...Android 4.4 修改状态栏颜色 // 将状态栏设置为透明(需要 API 19) 设置成这种模式后,状态栏会变成透明,我们的内容布局(只是我们 Activity 对应的布局,不包含 Window...,我们只需要自己来创建一个系统栏背景就可以了。

    3.9K10

    android 设置标题栏背景颜色_状态栏菜单栏都在哪

    android中沉浸式状态栏的文章已经满大街了,可是在实现某些效果时,还是得各种搜索,测试一通后,最后还常常满足不了要求,即使好不容易在一部手机上满足了需求,放在另外一手机上,发现效果还各种不适配。...一个Activity包含多个Fragment切换时,不同的Fragment的状态栏背景,状态栏文字颜色和图标要求不一样怎么实现? 3....实现秀明状态栏常规方法 protected boolean useThemestatusBarColor = false;//是否使用特殊的标题栏背景颜色,android5.0以上可以设置状态栏背景色,...android:fitsSystemWindows=”true”属性就可以了,要不布局会跑到状态栏和导航栏下面,与导航栏和状态栏重叠,这当然不是我们希望的。...同一个Activity包含多个Fragment时,如何实现不同fragment的状态栏背景和文字颜色不一样 如下面的效果图: 就是设置了状态栏为暗色后,还得设置回来,这其实主要靠下面两个flag

    3.3K10

    Translucent System Bars-4.4新特性

    概念 Google官方文档4.4APIs_KITKAT 该特性是在Android 4.4 KITKAT版本(API_19)中引入的新特性。 也就是我们说的 透明栏 ,国内一般称之为 沉浸式顶栏。...我们先来看看 Translucent System Bar 新特性引入后,发生了什么样的变化。 ? 可以看到系统的通知栏和app界面融为一体。...> --Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色--> android:statusBarColor">@android...---- APP的Tab栏和系统导航栏分开来设置。 由于它的TAB栏是纯色的,所以只要把系统通知栏的颜色设置成和TAB栏一样的即可,实现方式上比第一种要简单的多。...总结 方式一适用于app中没有导航栏,且整体的背景是一张图片的界面; 方式二适用于app中导航栏颜色为纯色的界面; android:fitsSystemWindows设置要在布局文件中,不要到theme

    61930

    浅谈 Android 自定义锁屏页的发车姿势

    这个“半透明化”包括了状态栏和通知栏,当开发者让应用支持这个新特性的时候,状态栏和导航栏可以单独/同时变为渐变的半透明样式,如下图: ?   ...现在除了原有的“半透明”模式以外,还有“全透明”以及“变色”模式,一种会完全隐藏背景,另一种可以取色作为背景颜色,多种样式的透明栏如下图(上图为透明状态栏,下图为透明导航栏): ? ?   ...所以,透明栏只是能够改变状态栏和导航栏的颜色,并不像沉浸模式那样隐藏状态栏和导航栏,两者是有本质区别的。   对于Android 4.4以上5.0以下的版本,设置透明状态栏的方式如下: ?   ...对于Android 5.0及以上版本,设置透明状态栏的方法如下: ?   ...添加标志位FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,并调用setStatusBarColor设置状态栏的颜色为透明。

    4.7K91

    浅谈Android自定义锁屏页的发车姿势

    Android 4.4 之后加入的Immersive Full-Screen Mode 允许用户在应用全屏的情况下,通过在原有的状态栏/导航栏区域内做向内滑动的手势来实现短暂调出状态栏和导航栏的操作,且不会影响应用的正常全屏...,短暂调出的状态栏和导航栏会呈半透明状态,并且在一段时间内或者用户与应用内元素进行互动的情况下自动隐藏,沉浸模式的四种状态如下图。...这个“半透明化”包括了状态栏和通知栏,当开发者让应用支持这个新特性的时候,状态栏和导航栏可以单独/同时变为渐变的半透明样式,如下图: ?...现在除了原有的“半透明”模式以外,还有“全透明”以及“变色”模式,一种会完全隐藏背景,另一种可以取色作为背景颜色,多种样式的透明栏如下图(上图为透明状态栏,下图为透明导航栏): ? ?...所以,透明栏只是能够改变状态栏和导航栏的颜色,并不像沉浸模式那样隐藏状态栏和导航栏,两者是有本质区别的。

    3K80

    React Native顶|底部导航使用小技巧

    ,也能配置navigation的标题 TabNavigatorConfig tabBarComponent- 用作标签栏的组件,例如 (这是iOS上的默认设置), (这是Android上的默认设置)TabBarBottomTabBarTop...activeBackgroundColor - 活动选项卡的背景颜色 inactiveTintColor - 非活动标签的标签和图标颜色 inactiveBackgroundColor - 非活动标签的背景颜色...for (Android上的默认标签栏)TabBarTop activeTintColor - 活动标签的标签和图标颜色 inactiveTintColor - 非活动标签的标签和图标颜色 showIcon...- 是否显示标签的图标,默认值为false showLabel - 是否显示标签的标签,默认为true upperCaseLabel - 是否使标签大写,默认为true pressColor - 材质波纹颜色...(Android> = 5.0) pressOpacity - 按压标签的不透明度(iOS和Android <5.0 only) scrollEnabled - 是否启用可滚动选项卡 tabStyle

    9.4K60

    Android开发笔记(一百六十三)高仿京东的沉浸式状态栏

    用于控制底部导航栏是否透明。...之后版本,系统允许直接定制状态栏的颜色,例如调用Window对象的setStatusBarColor方法即可设置顶部状态栏的背景色,调用Window对象的setNavigationBarColor方法即可设置底部导航栏的背景色...View decorView = window.getDecorView(); // 两个标志位要结合使用,表示让应用的主体内容占用系统状态栏的空间 // 第三个标志位可让底部导航栏变透明...对于Android4.4,情况还会更加特殊,因为系统没有提供设置状态栏颜色的方法,所以只能手工搞个假冒的状态栏来占坑。...修改之后的状态栏背景设置代码如下所示(兼容Android4.4,以及5.0以上版本这两种情况):     // 重置状态栏。

    1.8K20

    android:fitsSystemWindows 是什么意思?

    一、属性定义android:fitsSystemWindows="true" 是一个 布局属性(View 属性),用于告诉系统: “请把我的内容布局边界往内缩,让我不要被系统窗口(比如状态栏、导航栏)遮住...,可能被状态栏或导航栏遮挡 举例:如果你希望全屏沉浸(例如背景图延伸到状态栏):android:fitsSystemWindows="false"如果你希望内容避开状态栏(例如标题不被遮住):android...六、常见误区误区解释“设置 true 一定能解决遮挡问题”不一定,沉浸式状态栏或透明导航栏时要手动处理 Insets。“它是控制状态栏透明度的”❌ 错误。它只影响布局边距,不控制状态栏颜色或透明度。...七、实战建议目标建议想让内容避开状态栏在根布局加 android:fitsSystemWindows="true"想让背景图铺满全屏(状态栏透明)设置 fitsSystemWindows="false"...它不是“全屏”或“透明”的控制开关,而是“避让系统栏”的提示信号。

    33610

    iOS透明导航栏的平滑过渡(进阶版)引实现过程结

    引 如我在传送门:iOS导航栏切换界面时隐藏和显示中所说,现在很多App的个人中心模块都是不保留导航栏的,会直接使导航栏透明,比如做的很好的QQ个人信息界面: 为什么说QQ做的很好呢?...而很多App的做法其实比较粗糙,类似于我在传送门:iOS导航栏切换界面时隐藏和显示中的做法,需要导航栏透明时,直接将导航栏隐藏起来。...设置导航栏背景透明度 导航栏上应该是有很多view的,我们要做的是只让背景透明,而保留标题、返回按钮。iOS没有直接给我们提供对于导航栏背景view的访问途径,那么我们只能自己来找了。...有它在岂不是前功尽弃了,再用上面的方法已经不管用了,这条线不在我们找出来的子view之中,通过查资料,要隐藏这跟细线的方法很多,但是要跟我们对导航栏背景的设置不冲突,又要能到只在将导航栏背景设为透明时才隐藏...现在导航栏的透明就比较完美了: 对于这种将导航栏背景直接设为透明的情况,在 Tabbar 切换界面时,也不会出现导航栏收起的小动画: 为UIViewController添加导航栏透明度属性 为了方便

    4.3K40

    iOS状态栏设置

    statusBar的颜色 在navigationBar上addSubView该UIView即可 UINavigationBar设置 上面说了状态栏 这里顺便把UINavigationBar也说了 我的配置...//设置背景色(不透明时没用,因为barTintColor在backgroundColor的上一层) appear.backgroundColor = UIColor(red: 52/255, green...; 注意 1) appear.translucent配置在早期系统会崩溃,不建议配置,建议在ViewController中配置 2) 在translucent=true也就是透明时,barTintColor...=false也就是不透明时,可以去掉navigationBar下的黑线,代码如下 //去掉navigationBar下的黑线 appear.setBackgroundImage(UIImage(), forBarMetrics...下的黑线,会导致状态栏颜色与navigationBar的背景色不同,暂没找到好的解决方法 6) 设置navigationBar背景透明的方式 跟去黑线的方式相同

    3.6K11

    导航栏调色那些事儿2. 标签栏TableBar那些事儿

    导航栏调色那些事儿 小规律: 要设置内容,全找item 要修改颜色及文字属性,找bar 1.1 改变 NavigationBar 的背景颜色 [UINavigationBar appearance].barTintColor...iOS7以后,status bar 的背景颜色变成了透明色,而且系统会根据 app的颜色自动改变 status bar 的字体颜色(黑和白)。...; } 1.7 给导航栏设置一张背景图片 这张背景图片系统默认的高度是64 [self.navigationBar setBackgoundImage:[UIImage imageNamed:@"navBar..."] forBarMetrics:UIBarMetricsDefault]; 1.8 导航栏的半透明效果 如果设置成NO,tableView就从状态栏下面开始。...标签栏TableBar那些事儿 2.1 调色 可以完全参考导航栏的,几乎雷同。 2.2 关闭半透明效果 一旦关闭标签栏的半透明效果,控制器的view就不会到达屏幕最底部了,而是到了标签栏的紧上方。

    2.1K50

    网易考拉 Android 通知栏适配全方案

    增加了Style 增加了通知栏按钮 支持通知栏展示的优先级配置 通知栏背景改为黑色透明 Android 8.1 修改记录^4 Android 8.1版本的通知栏在3.X版本的基础上进行了大量修改。...Android通知栏的背景色有几种情况,白色、暗色、暗色透明和黑色。如果生成的Bitmap带背景色,这个背景色就很难选择。如果选择黑色背景,那么在白色通知栏的机型上就很难看。...解决字体颜色和背景颜色一样的问题有三种解决方案,分别是: 背景色固定不透明,字体颜色与背景色形成反差。(360和京东的做法) 背景色透明,字体颜色采用系统原生的notification_style。...背景色透明,通过特殊方式拿到通知栏字体颜色和字体大小。 ? 其中,第一种方案简单,能够兼容所有厂商机型。例如京东固定背景色为黑色,字体为红色。...例如,可以为一个正在导航的应用,或者来电设置一个背景色。

    6.2K11
    领券