一、业务背景 在电商平台进行在线支付时,通常我们直接使用银行卡或第三方商户直接进行付款,就结束了一个完整的购物流程。...但是将数据和业务逻辑简单抽离出视图,可能造成的另一个问题就是presenter层变的臃肿。 此时,我们可以引入一个经典的算法思想,即分而治之 (Divide and Conquer)。...这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。...().addObserver(wrapper); } 基于这一能力,我们可以轻易的了解到它们的优势: 从此我们不需要新增繁琐的处理生命周期相关的代码; 由于LiveData被设计为粘性事件,在页面状态由非活动状态转为活动状态时...,会接收到最新数据,使得我们接收的数据始终保持最新状态; 在更新数据到视图时,不会因为此时activity处于停止状态而发生crash; 在页面退出时,被绑定的Lifecycle会被销毁,与该Lifecycle
你不会希望用户在滚动的时候看到五花八门的内容和状态栏自身的元素混合在一起。想要让用户感受到内容区域够大的同时,最大限度地保证可读性,请保证在状态栏后面添加一块背景,用以模糊出现在状态栏后的内容。...在屏幕处于同一方向时,最好不要改变不同屏上导航栏的背景图片、颜色和透明度。 确保你自定义的返回按钮的外观与操作仍然像一个返回按钮。...点击之后该项服务通常会立刻执行,当这项服务过于复杂时,系统将会进一步索取更多的信息之后才会为用户执行该服务。 使用活动来让用户执行你的应用所提供的服务。...浮出层: 是一个自包含的模态视图 在横屏环境中,浮出层会包含一个箭头,指向其出处 背景是半透明的,并且会模糊其背后的内容(毛玻璃效果) 可以包含多种对象和视图,比如: 表格,图片,地图,文本,网页或者自定义视图...一般来说,一次只展示一个滚动视图。由于用户滚动屏幕时动作幅度经常都会很大,如果在一屏中同时存在不止一个滚动视图,他们很容易会碰到另一个。
有时,导航栏的右侧也会有一个控件,如“编辑”或“完成”按钮,用于管理活动视图中的内容。在拆分视图中,导航栏可能会显示在拆分视图的单个窗格中。...导航栏是半透明的,也可以添加背景色,并且必要时可以设置为隐藏。 ? 某些情况下可暂时隐藏导航栏,以提供更沉浸的体验。例如,当人们查看全屏照片时,“照片”会隐藏导航栏和其他界面元素。...当数据层次结构深于两个级别时,请在拆分视图界面的补充列中使用列表视图。 四、状态栏(Status Bars) 状态栏出现在屏幕的上边缘,并显示有关设备当前状态的有用信息,例如时间,移动电话和电池电量。...有几种常见的技术可以做到这一点: · 在APP中使用导航栏,该导航栏会自动显示状态栏背景,并确保内容不会显示在状态栏背后 · 在状态栏背后显示自定义图像,如渐变色或纯色 · 在状态栏背后放置模糊的视图...确保所有选项卡始终处于启用状态,并说明为什么选项卡内容不可用。例如,如果iOS设备上没有歌曲,则“音乐”应用中的“立即收听”选项卡将说明如何下载歌曲。 始终在附加视图中切换上下文。
推荐阅读: 具有面部识别功能的移动应用程序:如何实现 01 视图控制器的状态恢复 视图控制器的状态保存和恢复,允许用户在离开应用程序后可以返回到之前完全相同的用户界面状态。...有时,由于内存不足,操作系统可能需要在应用程序处于后台时从内存中删除应用程序,如果不保留状态,应用程序可能会丢失其对最后一个UI状态的跟踪,可能会导致用户丢失正在进行的操作!...这可能会导致糟糕的体验,因为用户希望你的应用程序与离开时处于相同的状态。 在 Apple 的 保留你应用程序的 UI 文章中提及: 「用户希望你的应用程序与他们离开时处于同一状态。...标识符是通过视图层次结构来分组的,从根视图控制器到当前活动视图控制器。...(查看大图) 上面显示的所有 label(“查看朋友”等)被红色突出显示,是因为当 label 被拖动到 storyboard 时,其背景颜色默认设置为透明。
静电说:不少同学在绘制阴影的时候,特别是卡片阴影的时候,都会有不少难度,或者把握不好其中的度,在本篇文章中,我们 一起来学习一下,如何让你在UI中绘制出更舒服的阴影效果。 ?...我们使用阴影来强调特定的组件,创建深度以在屏幕中来创造一个特别的世界,并给出某些组件的特定状态。但是,我们在哪里,以及如何明智地使用它们呢?...它们将在几秒钟内处于活动状态,因此您需要使它们清晰并与背景中的元素产生最佳对比。在视觉上,柔和的阴影是非常棒的选择。 ?...带有阴影的提示图形 场景04.活动项目(如开关) 当涉及到活动状态(例如切换或选定的列表项)时,一种不错的做法是为它们提供视觉层次结构,例如颜色,当然还有阴影。另外,使它们简单而柔软。 ?...总之,使用阴影的规则就是,是背景与阴影,以及其它UI元素平滑并融合。使用不透明度,模糊数值以及X或者Y轴偏移量,直到获得更加平滑的阴影位置。另外,不要让阴影过分夸张,这会分散用户的注意力。 ?
和类图一样,对象图对系统的静态设计或静态进程视图建模,对象图更注重现实或原型实例,这种视图主要支持系统的功能需求,对象图描述了静态的数据结构。对象图可以被看作是类图在某一时刻的实例。...4、状态图(Statechart Diagrams) 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。...例如,对于一个网上销售系统,在用户处于登录状态前是不允许购买商品的,这就需要程序员开发程序的过程中加以限制。...活动图是状态机的一种特殊情况,其中全部或大多数状态是活动状态,并且全部或大多数转换时通过源状态中活动的完成来触发的。活动图适应状态机的全部特征。活动图和状态图在对一个对象的生命周期建模时都是有用的。...当使用下划线时,意味着序列图中的生命线代表一个类的特定实例。 6.2 同步消息 6.3 异步消息 6.4 注释 6.5 约束 6.6 组合 组合片段用来解决交互执行的条件及方式。
保持配套设备应用唤醒 - 对于管理智能手表和健身跟踪器等配套设备的应用,如何确保关联的配套设备位于附近时保持运行和连接状态是个难题。...当设备在附近时,系统会确保服务处于唤醒状态,并且当设备进入和离开连接范围或关机时,系统会向服务发出通知,以便应用根据需要清理状态。...更易用的模糊、色彩滤镜等特效 - 在 Android 12 中,您可以更轻松地将常用图形效果应用于视图和渲染结构上。...这个 API 可以设置模糊半径,以调整雾面密度和范围,平台只会对您的应用窗口边框内的背景内容应用模糊效果。...△ 窗口背景及窗口后面的内容均模糊化处理的对话框窗口 应用兼容性 在推出新的平台版本时,我们会优先考虑应用的兼容性,让系统更新的体验更快速、更顺畅。
当Activity重启时,恢复之前的状态很重要。...image 当指定的属性(可折叠设备的折叠/展开时触发)发生变化时,MyActivity不会重启,而是会收到 onConfigurationChanged()的调用,在此方法中处理配置变更,更新视图布局...从 Android P (9.0) 开始,谷歌提供了名为Multi-resume的新功能,允许设备厂商在多窗口模式下保持所有可见应用处于活动状态,解决了分屏的多个应用仅有一个能保持活动状态的问题。...多活动窗口 当手机展开时,用户可以同时运行两到三个APP,可在任意Samsung Android 9.0设备上通过元数据方式测试多活动窗口。...image 在多窗口模式下运行您的应用程序 通过点击其他应用将焦点从第一个应用移动到另一个应用 检查应用程序是否仍处于resumed状态 当您的应用意外丢失资源(例如相机)时,检查应用是否有任何意外行为
我们想要实现的是,当设备在横向和纵向之间移动时,相机界面可以适当地旋转。 △ 本例中的相机界面 MotionLayout 旋转动画 我们可以使用 MotionLayout 实现这一功能。...在示例项目启动后,您也许会注意到,当相机处于活动状态时,Android Studio 会给出如何在相机虚拟场景中进行导航的提示。...点击警告按钮打开问题视图,可以看到这里提示布局中的一个按钮被部分隐藏了。我们可以查看不同的预览配置,如果一个视图显示在一个屏幕上,则最好也能显示在另一个屏幕上。...在需要调整某些曲线时,我们可以通过这个方法很方便地查看动画是如何组合在一起的。...△ 实时更新的模糊状态 上面的示例顺带试用了 Android 12 中的模糊处理。我们在布局预览和设计预览时均支持模糊效果。 这是一个很激动人心的功能。
了解活动如何生存,以及活动整个生命周期的状态变迁,能更清楚地知道如何去实现活动。 从系统的角度来看,当Android应用(APP)启动运行时,就会创建一个任务(Task)。...(1) 运行状态 活动处于运行状态时,将位于栈顶,表示用户当前正在与活动进行交互操作,即:正在使用活动界面。在系统资源紧张的情况下,通常不会销毁处于运行状态的活动。...处于暂停状态的活动仍然是存活着的,系统通常不会回收这种活动。 (3) 停止状态 当活动被压到返回栈的下面,在屏幕上完全不可见,这个时候活动就处于停止状态。系统会保存活动的状态和成员变量。...但是,当其他地方需要内存时,处于停止状态的活动有可能会被系统回收。 (4) 销毁状态。 如果活动被弹出返回栈,活动就被销毁了,系统会回收它所占用的内存和资源,这时活动就处于销毁状态。...碎片在运行状态是可见的,并且它所归属的活动也正在运行。当活动进入暂停状态(由于另一个未占满屏幕的活动被添加到了栈顶),它上面的碎片也会进入暂停状态。当活动停止,它上面的碎片就进入停止状态。
人们期望状态栏在系统范围内保持一致。 不要用自定义状态栏替换它。 将状态栏样式与您的app进行协调。...对状态栏下的内容进行遮挡。默认情况下,状态栏的背景是透明的,允许下面的内容显示。保持status bar可读,并不意味着它背后的内容是交互式的。...有几种常见的技术可以做到这一点: ·在您的app中使用navigation bar,它会自动显示status bar背景并确保内容不会出现在status bar下。...·在status bar后面放置一个模糊的视图。 考虑在显示全屏媒体时暂时隐藏status bar。当用户试图关注媒体时,status bar可能会分散用户注意力。...使用status bar来表示网络活动。 当您的app使用网络时,尤其是对于冗长的操作,请显示网络活动status bar的indicator,以便人们知道活动正在发生。
活动指示器: 当任务进行和加载时旋转,任务完成后自动消失 不支持用户交互行为 在工具栏或主视图中使用活动指示器来告知用户任务或加载正在进行中,但并不提示该过程何时会结束。 不要使用静止的活动指示器。...网络活动指示器: 出现在状态栏中,当网络活动正在进行时它会旋转,在活动停止时它则消失 不支持用户交互行为 当你的app正在链接网络,而这个连接过程将会持续好几秒的时候,你可以通过网络活动指示器来给用户以反馈...当视图数量超过页面宽度可承载的氛围时,点的大小和间距并不会因此变小(如果需要显示的点超过一定数量,系统会把它截断) 默认情况下不支持视图之间导航;你必须实现视图到视图之间的导航并适当地更新页面控件状态...当告知用户有多少打开的视图的需求比帮助用户选择特定的视图更重要时,使用页面控件。...从视觉上看,模态视图好像原来就处于当前视图的下面,当前视图移开时,它便出现了。离开模态视图时,原先的父视图从左边滑回屏幕右边。
弹出框 弹出框是当人们点击一个控件或屏幕上一个区域时显示的一个临时的界面。...一个弹出框: 是一个自包含的模态视图 在水平常规环境下,显示一个箭头指向它出现的点 有半透明的背景显示背后的模糊内容 可以包含大范围的对象和视图,比如: 列表、图片、地图、文本、网页或自定义的视图 导航栏...、工具栏或标签栏 与当前app视图中的对象交互的控件或对象 (默认情况下,弹出框中的列表视图、导航栏和工具栏使用半透明的背景来让弹出框的模糊层显出。)...弹出框会模糊其背后的内容,并且人们无法拖拽弹出框到别的位置。 确保同一时间只有一个弹出框在屏幕上。你不应该在同一时间显示超过一个弹出框(或者自定义的外观和行为类似弹出框的视图)。...如果你改变太多弹出框的外观,用户就不能依赖他们以前的经验来帮助他们理解如何在你的app中使用它。 当弹出框依然可见时改变其尺寸要谨慎。
只在必要时添加边框或背景颜色。默认情况下,系统按钮没有边框或背景。但是,在某些内容区域中,边框或背景是表示交互性所必需的。...当执行无法量化的任务(例如加载或同步复杂数据)时,加载器会旋转。任务完成后它会消失。活动加载器是不是可交互元素。 ? 进度条优于加载器。...进度条非常适合显示任务的状态,尤其是当它帮助传达任务需要完成多长时间时。 在导航栏和工具栏中隐藏轨道的未填充部分。默认情况下,进度条的轨道包含已填充和未填充的部分。...在iOS 12及更早版本中,以及在全面屏显示的设备上,网络活动指示器会在发生联网时在屏幕顶部的状态栏中旋转,联网完成后消失。和活动加载指示器样式一样,并且是非交互式的。 ?...刷新控件是活动加载指示器的一种特殊类型,默认情况下处于隐藏状态,并在向下拖动要重新加载的视图时可见。例如,在“邮件”中,您可以将“收件箱”邮件列表向下拖动以检查是否有新邮件。 ? 执行自动内容更新。
想象我们正在开发一个新闻应用,其中一个界面使用RecyclerView展示了一组新闻的标题,当点击了其中一个标题时,就打开另一个界面显示新闻的详细内容。...这样我们就准备好了另一个碎片,接下来看一下如何将它动态地添加到活动当中。...类似地,每个碎片在其生命周期内也可能会经历这几种状态,只不过在一些细小的地方会有部分区别。 运行状态 当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。...暂停状态 当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。...总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。 销毁状态 碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。
当它被激活时,按钮可以显示较窄的边框或浅色背景作为操作响应。 ?...今天的日期依然处于高亮状态,年份会显示在返回按钮处,这样用户可以清楚地知道他们在哪儿,他们从哪里进来以及如何返回。 ?...下面的实例可以帮助你形象展现尺寸类型如何适配不同设备的显示环境。例如:iPad(包括iPad Pro)在长宽和横屏竖屏时都使用常规尺寸类型。换句话说,iPad显示环境一直处于垂直和水平的常规状态。...对于文字内容的增加应该谨慎,且仅当增加文字对于提升体验有益时才这么做。不要指望用户会阅读大段的文字。例如,可以使用动画而不是文字来描述如何执行一个简单的任务。...如果设备当前已经处于横向状态,那么就按照当前状态启动应用,除非你有充分的理由不这么做。其他情况时,可以考虑按home键处于右侧的方式启动应用。
如果当有人以不受支持的方向握住设备时您的应用程序不会自动旋转,那么他们会本能地知道如何旋转设备。 根据上下文自定义APP对旋转的响应。...请注意,当诸如录音和位置跟踪之类的后台任务处于活动状态时,全屏iPhone上的状态栏不会更改高度。 如果你的APP当前隐藏状态栏,请重新考虑全屏iPhone的隐藏与否。...七、材质(Materials) iOS提供的材质(或模糊效果)都可创建半透明效果,可唤起深度感。材质的效果是为了让视图和控件能够提示背景内容,同时又不会分散前景内容。...为了产生这种效果,材质允许背景颜色信息传达到前景视图,同时模糊背景上下文以保持易读性。 当你使用系统定义的材质时,你的元素在每个上下文中都会很好看,因为这些效果会自动适应系统的明暗模式。...在一个时区,活动可能从今天开始。在另一个时区,同一事件可能已于昨天开始。通常,日期应反映观看活动的人的时区。但是,在某些情况下,例如在航班跟踪APP中,可以更清楚地显示航班开始的日期和时区。
如果您使用GLKit view和view controller,并且只在绘图方法中提交OpenGL ES命令,那么当您的应用移动到背景时,您的应用会自动正确运行。...默认情况下,GLKViewController类会在您的应用程序变为非活动状态时暂停其动画计时器,以确保您的绘图方法未被调用。...当玩家回到游戏时,游戏的资源仍然在记忆中,游戏可以立即恢复。 当用户启动另一个OpenGL ES应用程序时,您的OpenGL ES应用程序处于后台。...如果您使用GLKit视图和视图控制器,则当您的应用移动到后台时,GLKViewController类会自动处理其关联视图的帧缓冲区。如果您为其他用途手动创建帧缓冲区,则应该在应用移动到背景时将其丢弃。...当其大小改变时,GLKView对象相应地调整其帧缓冲区和视口的大小。
接下来,添加一个公共属性以指示栈是否处于活动状态,只有在有设置的情况下,情况才如此。想法是,如果未提供设置,则应跳过后处理。 ? 最后,我们需要一个公共的Render方法来渲染栈。...如果栈处于活动状态,则在此之前直接渲染栈。 ? 此时,结果看起来应该没有什么不同,但是增加了一个额外的绘制步骤,从中间帧复制到最终帧缓冲区。它在帧调试器中列为Draw Dynamic。 ?...(渲染 FX 栈) 1.4 强制清除 当绘制到中间帧缓冲区时,我们的渲染器会填充有任意数据的纹理。帧调试器处于活动状态时,你可以看到此信息。...为防止出现随机结果,除非使用天空盒,否则当栈处于活动状态时,请始终清除深度并清除颜色。 ? 请注意,这会使得无法在不使用后FX堆栈的情况下,清除之前在另一个像机渲染结果上进行渲染。...请注意,当3D图标用于Gizmos时,当栈处于活动状态时,它们将不再被对象遮挡。发生这种情况是因为场景窗口依赖于我们没有使用的原始帧缓冲区的深度数据。之后,我们将结合post FX i来介绍深度。
每个活动在其生命周期汇总最多可能有四种状态: 运行状态:当一个活动处于栈顶位置,系统最不愿回收的就是处于运行状态下的活动 暂停状态:当一个活动不再处于栈顶位置,但是仍然可见。...(因为并不是每一个活动都会布满屏幕,例如Toast等出现时,前一个活动就是暂停状态),该状态下的活动仍然是完全存活的,系统也不愿意去回收 停止状态:当一个活动不再处于栈顶位置,并且完全不可见时,系统愿意为这种活动保存相应的状态和变量...销毁状态:当一个活动从回收栈中移除后就变成了销毁状态。 Activity生命周期图 ?...onResume():当Activity可见且获得用户焦点能交互时系统会调用。此时的活动一定位于返回栈栈顶,并且处于运行状态。 onPause():在系统准备去启动或恢复另一个活动的时候调用。...在此生命期中,活动总是处于运行状态下的,此时的活动是可以和用户进行交互的。 8、如何保存活动的状态?
领取专属 10元无门槛券
手把手带您无忧上云