概述 假设您的应用使用了 BottomNavigationView。通过这个功能,当用户选择另一个标签页 (Tab) 时,当前标签页的返回栈会被保存,而所选标签页的返回栈会被恢复。...也就是说,如果您的应用使用了为 BottomNavigationView 或 NavigationView 提供的 setupWithNavController() 方法,则只需要更新依赖库版本,便可默认启用多返回栈...支持多返回栈 让我们通过这个 仓库 中的高级导航示例来看看实际效果。 该应用由 3 个标签页组成,每个标签页都有它自己的导航流。...为了在导航的早期版本中支持多返回栈,我们需要在该示例的 NavigationExtensions 文件中添加一系列辅助函数。...如果您的应用使用 BottomNavigationView 或 NavigationView,并且您一直在等待支持多返回栈,您所需要做的仅仅是更新 navigation 和 fragment 依赖库,不需要改变任何代码
:viewportWidth="1024" android:viewportHeight="1024" path里的复制下来就行了 BottomNavigationView的使用 实现底部菜单常用的方式...RadioGroup + ViewPager + Fragment 加载相邻的Fragment FragmentTabHost + Fragment 加载选中的Fragment BottomNavigationView...有选中动画效果 之前我都是用前两种方式来做的 既然官方有现成的 还是推荐用官方的,毕竟有动画效果。...BottomNavigationView是一个底部导航栏控件,一般和fragment一起使用。.../navigation_app" android:icon="@drawable/bottom_navi_app" android:title="应用" />
下图是我们几乎在主流App中都能发现的一个功能。 ? 熟悉Android的朋友一定都会知道,很简单嘛,使用TabHost就OK了!...但是殊不知,TabHost并非是那么的简单,它的可扩展性非常的差,不能随意地定制Tab项显示的内容,而且运行还要依赖于ActivityGroup。...中加载布局文件,该布局文件也非常简单,仅仅定义了一个帧布局,在帧布局中包含了一个TextView <?...Fragment性能问题分析与解决 Fragment性能问题分析 我们上面是使用replace来切换页面,那么在每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量...我们不能使用replace来进行页面的切换,那么可使用的方法貌似只有add了,我们可以在加载的时候判断Fragment是不是已经被添加到队列中,如果已添加,我们就显示(show)该Fragment,隐藏
下面我们通过一些常见的迁移方案来了解一下这些问题 文字栏位改变 在 MDC 中,文字字段默认样式发生了改变。改进版本是经过用户调查研究的。 ? 我们建议您使用这个版本,来提高可用性和可配置项性。...下面这几种情况应该考虑 在布局中写的控件如果有对应的 MDC 控件的话,直接使用 MDC 控件 任何的风格,默认风格和默认风格属性应该改变成 MDC 版本 在编程中或者自定义类的父级类使用的任何控件都应该为...MDC窗口小部件使用这些属性来为其背景,文本,图标等着色。要了解哪些小部件使用哪种颜色,需要检查源代码中的默认小部件样式。 AppCompat和框架中还存在一些颜色,但不再适用于此新系统。...MDC小部件使用这些属性来设置文本样式。要知道哪些窗口小部件使用哪种类型板式,需要检查源代码中的默认窗口小部件样式。...用 cornerSize 来表示尺寸 ? MDC小部件使用这些属性来设置其背景样式。要了解哪些窗口小部件适用于哪些形状类别,需要检查源代码中的默认窗口小部件样式。
来瓶哇哈哈,精神抖擞来一波~ 简单回顾 Material Design,是谷歌在14年的IO大会上提出的一种新的理念,也被称为新的设计语言(也被称为“原材料设计”),称它为设计语言不为过,但是实际上,这仅仅是谷歌提倡的一种新的设计风格...- P compileSdkVersion 'android-P' Step 3:移除项目工程中依赖的v7包以及添加material依赖 dependencies { // 3.移除项目工程中依赖的...那下面按照步骤操作一次: Step 1:在布局中添加BottomNavigationView: android.material.bottomnavigation.BottomNavigationView...持久性底部页面是从屏幕底部出现的视图,在主要内容上升高。他们可以垂直拖动以暴露他们的内容列表。 注意:如果要使用模态(对话框)的底页,请使用 BottomSheetDialogFragment。...通过添加以下xml属性来应用该行为 app:layout_behavior=”com.google.android.material.bottomsheet.BottomSheetBehavior”
(内心默默来句,你咋不上天。) 先来看个两者间对比效果吧~ 效果对比 原有两张静态图切换: ? 小动画浪起来: ?...前期介绍 针对目前使用的 BottomNavigationView 以及 Lottie 简单记录下,以便日后遗忘直接查看。 1....return item; } } 对于基本的 MenuItem Icon 选中/默认切换,一般配合 menu 来食用,例如。...而关于选中状态切换时,对应标题字体大小发生改变以及导航栏高度,都可以通过在 dimens 定义如下解决: 中遇到的问题,一定要采取多方案,首要保证内容、结果的输出,其次才是合理的循循渐进的优化。 2、BottomNavigationView Item 长按提示怎么搞掉?
: 导航栏与页面跳转:使用谷歌官方提供的现成组件BottomNavigationView+Navigation组件+Fragment的方式来实现; FAB停靠导航栏:利用协调者布局CoordinatorLayout...以及每个item对应的页面使用Fragment组件来实现,页面跳转、item切换动画等的相关功能都是现成的,方便快捷。...假设按钮在垂直方向上的当前位移距离大小为d,当按钮向上运动时导航栏上的凹槽应该往中间收缩,在收缩过程中保持两旁小圆半径大小和30°夹角不变,这时另中间圆的圆心同步在垂直方向上移动-d,动态修改distance...的值,由此一来可以达到凹槽收缩的效果,按钮向下运动时同理: 另外还需要考虑按钮完全位于导航栏上方时的情况,这种情况下直接使用直线来代替原来的曲线部分。...let { drawBackground(it) } } } 如上面的代码所示,重写自定义BottomNavigationView的onDraw方法来绘制凹陷效果,外部通过调用updateDistance
这是第二个关于导航 (Navigation) 的 MAD Skills 系列,如果您想回顾过去发布的内容,请参考下面链接查看: 导航组件概览 导航到对话框 在应用中导航时使用 SafeArgs 使用深层链接导航...在本文中,我们将为大家讲解另外一个用例,即类似操作栏 (Action Bar)、底部标签栏或者抽屉型导航栏之类的 UI 组件如何在应用中实现导航功能。...我需要在应用中增加一些页面,所以有必要使用抽屉式导航栏或者底部标签栏来辅助用户导航。但是我们该如何使用这些 UI 组件来集成导航功能呢?通过点击监听器手动触发导航动作吗? 不需要!无需任何监听器。...首先我需要添加一个 AppBarConfiguration 对象,NavigationUI 会使用该对象来管理应用左上角的导航按钮的行为。...比如,在我们的应用中,我可以将 donutList 和 coffeeList 的目的页面都定义为最顶层的目的页面。
突发奇想,给 app 加个换肤功能 三方库地址--https://github.com/ximsfei/Android-skin-support#应用内换肤 ---- Demo 地址: 点击右边 ?...:( 欢迎 star ) ---- 使用过程中踩坑无数,这里一一解释下 首先添加依赖 implementation 'skin.support:skin-support:3.1.1'...skin-support-constraint-layout:3.1.1' // skin-support-constraint-layout ConstraintLayout 控件支持[可选] 记得在...已经设置成功,现在引入皮肤就可以使用 我自定义的垃圾皮肤下载:https://github.com/FishInWater-1999/android-skin-change-applicatiom/tree...().restoreDefaultTheme(); // 指定皮肤插件, 并且监听加载状态 } 效果如下: ---- 如果对您有帮助,欢迎点赞~
在dependencies闭包中添加如下依赖: def nav_version = "2.3.2" // navigation依赖 ui 和 fragment implementation...然后建一个Fragment类,这里命名我就用ABCDE来命名了,实际开发中是肯定不能这样的。 ? 然后在layout新建一个布局fragment_b.xml ? 然后修改一下这个布局 来触发这个动作,可以写一个简单的按钮来触发。 在fragment_a.xml中修改布局如下: 在BFragment点击系统的返回键,你会发现直接退出当前应用了,因为这个时候Fragment还是属于MainActivity,那么它使用的就是Activity的返回栈,可当前只有一个Activity...而且使用ViewPager的话就是相当于你把BottomNavigationView替换RadioButton或者TabLayout来使用,这种方式也有很多,我就过多的说明了,上高水长,后会有期~
在看 简友:[英勇青铜5] 文章的时候 http://www.jianshu.com/users/8edc8ef5fef3/latest_articles 发现,在 com.android.support...:design:25.0.0 中 有对应的类支持 可能是自己其他方面事情的原因,android的代码量现在减少了很多,包括去了解新东西 ---- 大体效果 和之前的一些切换差不多 只是多了一个动画效果...---- 简单使用 添加比较简单 大体分为下面几部 在 build.gradle 文件中增加依赖: compile 'com.android.support:design:25.0.0' 在 res...="true" android:text="BASKETBALL" /> android.support.design.widget.BottomNavigationView android...bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码在Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...也就是对应着在menu中的两个菜单,同时也对应我们侧边栏中的一个首页和一个代码页, <item android:id="@+id/homeFragment"...2.2 BottomNavigationView使用 2.2.1 配置文件 和上面的步骤类似:也是配置好 navigation.xml布局以及 BottomNavigationView所对应的menu...4.3.2 NavController NavContorller是整个导航组件的核心,通过它来加载xml中fragment节点转化成NavDestination,并保存在栈内,通过navigate()
下面我们就来看看如何使用Bottom Navigation Activity来完成简单的底部导航栏功能。...那么我们想增加导航或者改变图标文字应该怎么办呢?...首先我们打开activity_main.xml文件,发现有这样一段代码 android.support.design.widget.BottomNavigationView android:id...自定义切换页面(Fragment) 这里我们使用framgment来切换页面。...="match_parent" android:layout_height="0dp" android:layout_weight="1"> 然后在layout
Navigation是一种导航的概念,即把Activity和fragment当成一个个的目的地Destination,各目的地形成一张导航图NavGraph,由导航控制器NavController来统一调度跳转...Jetpack笔记代码 本文源码基于SDK 29,IDE是Android studio 3.5.3 使用 创建工程,引入依赖, implementation 'androidx.navigation:...-- 底部的导航view,菜单文件里定义了3个item --> android.material.bottomnavigation.BottomNavigationView...return onNavDestinationSelected(item, navController); } }); //在目的地发生切换的时候...这里我们使用的是FragmentNavigator, //FragmentNavigator.java NavDestination navigate(Destination destination,
Android端的底部导航栏有着一套规范,详情 这篇文章为大家带来 1.官方BottomNavigationView的使用方法 2.结合ViewPager、Fragment实现一个流行UI布局!...最终实现效果: 在谷歌官方发布BottomNavigationView控件之前我们可以自己组合控件实现,比如LinearLayout + TextView(使用android:drawableTop...开始 1.新建project然后导入以下support:design library,BottomNavigationView就在这个design库中。...然后我们知道了这个效果是由mShiftingMode来决定的,那么上面的代码就好理解了。...在实例化BottomNavigationView后调用一次这行代码即可: BottomNavigationViewHelper.disableShiftMode(bottomNavigationView
,无法还原用户使用场景 * 每个版本迭代都需要PM,RD进行埋点梳理,时间进行消耗 全埋点 * 无法在每个按钮,页面加载调用代码,只需要在应用初始化加载即可 * 用户行为触发自动上报,无需PM...进行辅助记录应用的开启时间和pause时间,如果用户App在后台被强杀或者手动退出,那么下次重新使用APP的时候会进行检测Sp中的时间和当前的时间,然后进行对比,判断用户是否为重新启动APP,还是仅仅切换到后台再切换回来...应用点击控件 ------ 方案1:hook控件的点击事件接口进行代理 整体思路:根据ActivityLifecycleCallbacks接口监听回调,在onActivityResume回调中拿到当前的...,在ASM的官网中也有介绍。...cgtrack/TrackUtils" //普通设置点击事件 if(mInterfaces.contains('android/support/design/widget/BottomNavigationView
https://blog.csdn.net/lyhhj/article/details/73471270 绪论 最近懒癌症犯了,好久都没写博客了,当然也在做一些东西,也在整理自己一直以来使用的一些技术点...和Model是互通的可以互相通信,在Android中View一般代表着我们的xml进行界面的描述,而对于模型Model部分则大多对应于本地的数据文件或网络获取的数据体,很多情况下我们对这些数据的处理也会在这一层中进行...理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,因为它们之间并不依赖与具体,而是依赖于抽象。...中初始化P,并且连接V,在onDestroy()生命周期中释放P中引用的V。...; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView
的布局中(这里为MainActivity的activity_main)中添加BottomNavigationView控件, <?..." android:title="我的" /> 注意:这里item标签的id和上面nav_graph中fragment标签的id一致 资源准备好后,在MainActivity...使用Navigation+BottomNavigationView结合navigationUI扩展库,这种方式是不是相比于以往的实现方式更简单?...可能大家迫不及待的想应用到自己的项目中去了,可殊不知还有坑在里面。...这里新建一个FixFragmentNavigator类,我们希望在nav_graph中通过fixFragment标签来指定每个导航页面 @Navigator.Name("fixFragment") class
背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码在Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...也就是对应着在menu中的两个菜单,同时也对应我们侧边栏中的一个首页和一个代码页, <item android:id="@+id/homeFragment"...2.2 BottomNavigationView使用 2.2.1 配置文件 和上面的步骤类似:也是配置好 navigation.xml布局以及 BottomNavigationView所对应的menu菜单文件...4.3.2 NavController NavContorller是整个导航组件的核心,通过它来加载xml中fragment节点转化成NavDestination,并保存在栈内,通过navigate()
领取专属 10元无门槛券
手把手带您无忧上云