然而有些交互可能导致应用的某些视图被系统栏遮盖,导致用户无法看见或操作。本文正是为帮助您解决这个问题而撰写——如何判断安全的交互区域。 更具体一点来说,本文主要处理与系统 UI 出现视觉重叠的问题。...自 API 1 以来,它们就以各种形式存在着,并且每当系统 UI 重叠显示在您的应用上方时,这个方法就会被调用。常见的例子是下拉状态栏和导航栏,或者弹出屏幕软键盘 (IME)。...当系统设置为使用按钮导航模式时 (即上图例子所示),视觉冲突会更加明显,因为这时导航栏的高度更大。...注意,使用可点击区域里的数值进行布局时,依然可能导致自己的控件与系统 UI 在视觉上重叠,这一点与系统窗口区域 insets 不同,使用后者的值对自己的控件进行位移后能确保不会与系统/导航栏发生视觉重叠...该属性通常与 RecyclerView 一起使用,我们将在以后的文章中对其进行详细介绍。 但是,请确保 Listener 里的计算操作有幂等性,即多次进行该计算所得到的结果应该相同。
粘性沉浸模式: 用户可以通过在系统栏上滑动来暂时退出沉浸模式 这里我们向您进一步解释一下流程图里的内容。 问题 1: 应用需要隐藏导航栏或状态栏吗?...流程图里的第一个问题,询问您应用的主要使用场景是否需要隐藏导航和/或状态栏。所谓 "隐藏",是指让它们根本不可见。这并不意味着让您的应用实现从边到边的全屏状态。...即使考虑加上了内外边距的情况,用户仍然可以正常通过滑动操作来翻看里面的图片。 问题 6: 该视图/控件是否和强制系统手势交互区域重叠? 最后一个问题询问该控件是否位于系统强制手势导航交互区域内。...但是,当用户尝试快进和快退歌曲时,会发生这种情况: 发生这种情况是因为,屏幕底部的系统手势交互区域与进度条重叠了,而在这里系统手势优先级更高。...但请注意,我们依然需要在播放控件底部插入一个内边距,其值等于系统栏的高度,这样可以使歌曲名称等文本不会被系统导航条 (即屏幕底部的那条 "横线") 遮盖。
,圆形布局的内容,不会超过显示边界: 导航抽屉栏 为了节省宝贵的显示空间,通常手表应用是没有标题栏的,在使用 ViewPager 的时候,也没有 TabLayout 的显示,但因此我们无法很好的确认当前页面...导航栏 WearableNavigationDrawerView 就是用来解决这个问题的,我们先看看它的效果: 从手表顶部向下滑,会出现一个导航栏,显示当前页面的图标和标题。...操作抽屉栏 当需要对当前页面进行一些操作的时候,但页面里又没有空间再放按钮了怎么办?既然可以从顶部下拉出导航栏,要不在底部上拉出一个操作栏?...,controller.peekDrawer() 会在底部露出一小部分操作栏,如果当前页面是一个列表,这一部分会在列表滑动时隐藏,在列表到顶部和底部时显示: 露出部分默认会显示操作栏第一项的图标,可以在布局中添加...match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> 复制代码 代码中设置: // 使列表上的第一项和最后一个项在屏幕上垂直居中对齐
Toolbar(工具栏) Toolbar顾名思义是工具栏,作为ActionBar的替代品出现,谷歌推荐使用Toolbar替代ActionBar。...Toolbar可能包含以下可选元素的组合: – 导航按钮 – 品牌的Logo图像 – 标题和子标题 – 一个或多个自定义视图 this.toolbar = (Toolbar) findViewById...toolbar上面 setActionBar(toolbar); //设置了返回箭头,,相当于设置了toolbar的导航按钮 getActionBar().setDisplayHomeAsUpEnabled...<item :表示波纹图下面的条目 来看一下点击按钮的波纹效果 ?...RecyclerView(循环视图) RecyclerView是ListView的替代品,谷歌推荐使用RecyclerView替代ListView。
由于双窗格 Fragment 中的各个目的页面已经不属于应用主导航图的一部分了,因此我们无法通过按设备上的后退按钮在窗格内自动向后导航,也就是说,我们需要实现这个功能。...△ 平板横屏时的搜索应用栏 (窄模式) △ 平板竖屏时的搜索应用栏 (宽模式) 此前,我们通过在搜索 Fragment 的视图层次中的应用栏部分使用 标签,并提供两种不同版本的布局来实现此功能...这些独立的网格卡片是定义在 res/layout-w840dp 下的 备用布局,数据绑定处理信息如何与视图绑定,以及卡片如何响应点击,所以除了不同样式下的差异之外,不需要实现太多内容。...space, space)) } } SpaceDecoration 是 ItemDecoration 的一种简单实现,它在每个元素周围保留一定空间,这也解释了为什么我们会在 840dp 或更宽的屏幕上...将 RecyclerView 自身的内边距也设置为相同的值,会使得元素同 RecyclerView 边界的距离与元素间的空隙保持相同的大小,在元素周围形成统一的留白。
RecyclerView 有很高的自由度,可以说只有想不到没有做不到,真是越用越喜欢。这次用超简单的方法,让 RecyclerView 带上折叠的效果。 效果是这样的。...image.png 总结一下这个列表的特点,就是以下三点: 重叠效果; 层次感; 首项的差动。 下面我们来一个个解决。...重叠效果 其实就是每一项都搭一部分在它前面那项而已。我们知道,RecyclerView 可以通过设置 ItemDecoration 来实现列表的间隔效果,有没有想过要是把间隔设为负数会怎么样?...这里让每一项的高度比它的上一项高 5dp。...首项的差动 最后,我们想给第一项增加一个差动效果,这个同样在 onScrolled 方法里面做处理就好了: View firstView = layoutManager.findViewByPosition
这么说可能比较抽象,那就先来看看两张导航栏的效果图,第一张是导航栏完全展开时的界面,此时页面头部的导航栏占据了较大部分的高度; ?...这个内容视图可以是RecyclerView,也可以是NestedScrollView; 2、AppBarLayout嵌套CollapsingToolbarLayout,这是为了定义导航栏下面需要展开和收缩的部分视图...; 3、CollapsingToolbarLayout嵌套Toolbar,这是为了定义导航栏上方无论何时都要显示的长条区域,其中Toolbar还要定义两个不同的样式布局,用于分别显示展开与收缩状态时的工具栏界面...,蒙到最后就看不见了。...反过来,也可以一开始给导航栏罩上一层不透明的视图,此时导航栏的控件是看不见的,然后随着距离的变化,遮罩变得越来越不透明,导航栏也会跟着变得越来越清晰了。
NavigationView Android 5.0 协调布局 CoordinatorLayout Android 5.0 悬浮按钮 FloatingActionButton Android 5.0...底部弹窗 BottomSheetBehavior Android 6.0 应用栏布局 AppBarLayout Android 5.0 可折叠工具栏布局 CollapsingToolbarLayout...这个与系统版本有关,每个版本的android.jar是固定的,有在该内核中定义的控件才能正常调用,没在内核中定义的控件在运行时会扔出类找不到的异常。...3、第三类是v7兼容库和design库,它们有各自的库工程,开发者要在App工程中手工导入用到的兼容库。 v7与design库导入App工程后,编译出来的App即可兼容4.*的系统。...使用v7与design库的控件,类似于使用自定义控件,不但要在布局文件中引用完整路径的控件名称,还要在根布局声明命名空间(即添加属性xmlns:app="http://schemas.android.com
给大家介绍一下简单的 WebView 交互和夜间模式在「冰与火百科」中的实现。...(color); 复制代码 除了这两项,Toolbar 上可能还有操作按钮,像我这里左边的菜单和右边的搜索按钮。...它们的颜色可以这样设置: // 菜单按钮 Drawable navigationIcon = toolbar.getNavigationIcon(); if (navigationIcon !...通过遍历所有的 ChildView,对每一项进行颜色设置: for (int position = 0; position < recyclerView.getChildCount(); position...(); } catch (Exception e) { e.printStackTrace(); } 复制代码 StatusBar 在 SDK 21 以上,允许我们修改状态栏的颜色: if (Build.VERSION.SDK_INT
(水果名字和图片id); 实例化诸对象; 设置toolbar 设置导航按钮 设置折叠栏标题...重复fruitname生成长字符串 private String generateFruitContent(String fruitName){ } 响应导航按钮...; app:layout_anchorGravity属性将悬浮按钮定位在标题栏区域的右下角。...fruitContent.append(fruitName); } return fruitContent.toString(); } //响应导航按钮...于是达到了系统差异型的功能实现的目的。 最后还需让FruitActivity使用这个主题,修改AndroidManifest.xmI: <?
深入理解布局 深入理解布局指南 介绍了布局容器的相关概念,它提供了一个整体框架,可帮助开发者思考如何在屏幕上排列导航栏、工具栏和内容等界面元素。...例如,在大屏设备上,您可使用 Navigation rail (左侧边栏导航条) 代替 底部导航 (Bottom navigation),两者功能相同,视觉表现方式也类似,但 Navigation rail...信息流 我们可以通过信息流沉浸式地展示一个数据集,因此 RecyclerView 是非常适合的选择,我们可以通过改变 RecyclerView 使用的 LayoutManager 来改变其展现形式。...我们有许多可选方案,比如使用屏幕尾侧的侧边抽屉式导航栏,或者使用上滑式底部动作条,或者使用选项菜单,甚至可以将内容完全隐藏起来。...用户轻易就能触及屏幕的底部角落,但可能无法触及屏幕最顶端,尤其是在竖屏模式下。这意味着如果您使用 Navigation rail 这类组件,将导航按钮居中或固定在屏幕底部,这会更便于用户的操作。
使用标准的返回按钮。标准的返回按钮可以让用户通过信息层次结构来追溯自己的步骤。但是,如果你想使用自定义返回按钮,请确保它样式仍然看起来是返回,且与界面的其余部分匹配。...三、侧边栏(Sidbars) 侧边栏在iPhone上使用较少,更多的用在iPad。它提供了应用程序的导航,在侧边栏中选择一项可以使人们导航到特定的内容。例如,“邮件”中的边栏显示所有邮箱的列表。...如果由于水平空间有限而无法显示某些标签,则最后一个标签会变为“更多”标签,从而需要在另一个页面上显示的其他标签。 通常,使用标签栏在应用程序级别组织信息。...六、工具栏(Tool Bars) 工具栏出现在页面的底部,其中包含执行与当前视图或内容相关操作的按钮。工具栏是半透明的,也可以添加背景颜色,并在用户不需要它们时应该隐藏起来。...工具栏包含用于执行与当前上下文有关的动作的按钮,例如创建项目,删除项目,添加注释或拍照。标签栏和工具栏永远不会在同一视图中同时出现。 提供相应的工具栏按钮。
android:fitsSystemWindows=”true”属性就可以了,要不布局会跑到状态栏和导航栏下面,与导航栏和状态栏重叠,这当然不是我们希望的。...带有底部导航栏手机底部导航按钮会和navigationbar重叠 如下图所示: 全屏时,由于视图布局会填充到状态栏和导航栏下方,如果不使用android:fitsSystemWindows=”true...”属性,就会使底部导航栏和应用底部按钮重叠,导视按钮点击失效,这该怎么办?...计算底部的NavigationBar高度; 3. 最后设置视图边距。...最后实现效果如下: 参考文章:android 6.0导航栏 NavigationBar影响视图解决办法 4.
栏(Bars) 栏,可以告诉用户在APP中当前在所在的位置、能提供导航,还可能包含用于触发操作和传递信息的按钮或其他元素。包括6种:导航栏、搜索栏、侧边栏、状态栏、标签栏、工具栏。...在内容周围使用足够的填充,以保持布局整齐并防止内容重叠。 集合的方式不适用于文本信息,文本信息可以用列表。相对于集合,文本信息展示在一个可滚动的列表中,浏览起来会更简单和有效。 谨慎进行动态布局变更。...浮层适合大屏幕上,可以包含各种元素,包括导航栏、工具栏、标签栏、表格、集合、图像、地图和自定义视图。当浮层出现时,其他视图的交互行为会被禁止,直到浮层被取消/关闭。...拆分视图提供与选项卡栏相同的快速导航,同时更好地利用了大屏幕。 为每种类型的列选择适当的样式。对于显示侧栏的主列,请使用侧栏外观。此外观适用于应用程序级导航和集合列表,例如Mail中的邮箱。...行可以被分隔为不同标记的部分,并且会有索引标记显示在屏幕右侧。页眉可以出现在一节中的第一项之前,页脚可以出现在最后一项之后。 ? 分组列表。
答案是图层(Layer),浏览器会通过不同的图层来渲染,最后合并图层(Composite)成为一帧图像。 那什么样式会新建图层呢?...右边的三个按钮分别是显示边框、绘制时显示红色背景,显示页面中所有的层,都勾选上。 显示边框就是会给每个图层加上绿色边框,可以直观地看到有哪些区域是在单独的图层渲染的。...比如下面这个 gif: 然后,重点来了,这些图层都是为什么创建的呢?什么样式导致的呢? 点击每一个图层,都可以看到导致图层创建的原因! 比如 html,是因为是根元素创建的图层,这个没啥好说的。...侧边栏是因为有 z-index 为负值的子元素所以创建的图层。 导航栏是因为 3 个原因创建的图层:元素有 3D 转换,有 position:fixed 的样式,元素可能有其他元素重叠。...而且图层之间的上下关系也可以直观的看出来: 是不是超方便! 回过头来,我们再来聊下 Chrome Devtools,为什么不用它的呢? 因为它确实不咋好用。
1.数据错乱 最近在开发一个基于RecycelrView的编辑器, Recyclerview中包含Edittext在滚动时会发生数据混乱的问题,之所以数据混乱就是因为Recyclerview的复用导致的...(rect) // 计算出剩余高度: 除了状态栏高度、topBar高度、bottomBar高度、键盘高度的剩余高度 var invisibleHeight...- 44.dip2px //标题栏 - 44.dip2px //底部菜单栏 R.id.bottomLayout 即图中...图片添加按钮的整个容器的高度 ) if (BarUtils.isNavBarVisible(window)) {...EditText距离RecyclerView顶部的距离 val etDescView: View?
看一下效果图就知道了,注意看顶部的悬浮标签切换时的效果: image.png 这是我在之前一个自定义侧边索引栏的项目上修改的 思路是这样子的: 布局里面增加一个和索引 item 长的一样的 view...,默认显示列表第一项的索引字母。...监听列表的滑动,当列表可见第一项发生变化时,更新悬浮 view 显示的字母为当前可见第一项的索引字母。 感觉比想象中简单啊。...可以看出逻辑都是在滑动事件里,我们用 RecyclerView 的 addOnScrollListener 方法监听列表的滑动事件,在监听器里面实现上面的逻辑。...最后说明一下,这个代码是使用 RecyclerView 实现的,要是用 ListView 的话是有问题的。
区域相重叠,会被遮挡 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state...重叠,所以看起来矩形就消失了 ?...使用场景:设置View的边界大小,使得其大小>View的背景大小 // 如 按钮图标(View的背景)较小,但是我们希望按钮有较大的点击热区(View的边界大小) // 返回到分析1进来的原处 总结...从而获得与ItemView不重叠的绘制区域 ?...,如蒙层、重叠内容等等 2.3.4 实例讲解 实例说明:在 RecyclerView 上每个 ItemView 上叠加一个角标 ?
开始搭建静态网站 一、创建 CODING 项目 在 CODING 控制台左侧导航栏中点击【项目】,来到项目列表页,在项目列表页点击【创建项目】按钮。 ? 选择创建 DevOps 项目。...三、创建代码仓库并推送代码 进入第一步已创建好的项目,在左侧导航栏中选择【代码仓库】,点击左上角的【新建代码仓库】按钮。...四、新建静态网站 在项目左侧导航栏中选择【持续部署—静态网站】,点击左上角的【新建网站】按钮。 ? 在新建网站页面中输入网站名,选择代码仓库、部署的分支,部署的路径。最后选择部署的网站类型和节点。...点击【确定】按钮,等待网站部署完成。 五、访问静态网站 网站部署成功后,您可以前往网站基本信息页查看默认访问地址,并通过默认地址访问已经部署好的静态网站,快来试试吧~ ?...后续规划,敬请期待 CODING Wiki集成:支持将同一项目下的 CODING Wiki 的页面直接部署为静态网站页面对外部开放,知识分享更容易; 其他代码托管平台集成:提供与Github、Gitlab
从 Android4.4 以上版本才是真正的可以设置沉浸式体验,但也仅仅是操作状态栏和导航栏的显示与隐藏。...用户可以通过在状态栏与导航栏原来区域的边缘向内滑动让系统栏重新显示。...popupWindow.setClippingEnabled(false); 2.6 状态栏与布局顶部重叠解决方案,六种方案任选其一(可选) 正常使用 ZanImmersionBar 一般不需要考虑重叠问题但在项目中接入...之前说到 Android4.4 版本的时候解决重叠的方式是一种,也可以参考一下几种方式解决状态栏与布局顶部重叠问题。...,以及是否需要对异形屏适配,最后才是在实际开发和需求中对状态栏和导航栏处理。
领取专属 10元无门槛券
手把手带您无忧上云