首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

羊皮书APP(Android版)开发系列(十七)Android 底部菜单栏实现

app的底部菜单栏是非常常见的,微信/qq/支付宝/糯米等都有这样的底部菜单栏,我们日常的开发过程中也是会经常用到的,下面就是一种实现方式,供大家参考。...Activity中使用了,这里我们采用Activity+Fragment的方式实现布局的切换。..." > 然后创建Fragment,有几个菜单项就创建几个Fragment,这里使用了三个菜单项,创建的fragment依次是...color> #4CAF50 到这里整个底部菜单栏就完成来,看起来是一大堆的代码,其实很好理解,就是使用一个自定义的布局和...Fragment结合来实现的,自定义布局我们都要理解,Fragment使用方式我们更要熟悉。

1.5K20

谷歌官方导航控件BottomNavigationBar的日常使用

BottomNavigationBar和其他控件的配合是完全解耦的,日常使用分为BottomNavigationBar+ViewPager 、BottomNavigationBar+FrameLayput...1 使用 BottomNavigationBar+ViewPager 直接上代码 <android.support.v4.view.ViewPager android:id="@+id...findViewById(R.id.bottom_navigation_bar); String[] mTitles = new String[]{"首页", "发现", "信息", "的...下,为整个空控件的背景色; BACKGROUND_STYLE_RIPPLE 下为图标和文本被激活或选中的颜色;默认颜色为Color.WHITE 4.自定义Item颜色Individual BottomNavigationItem...,可以设置为0dp,默认为8dp 6.自定义选项图标BottomNavigationItem Icon Customisations 可以设置选项,选中和未选中使用不同的图标 //setInactiveIcon

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

谷歌官方导航控件BottomNavigationBar的日常使用

BottomNavigationBar和其他控件的配合是完全解耦的,日常使用分为BottomNavigationBar+ViewPager 、BottomNavigationBar+FrameLayput...1 使用 BottomNavigationBar+ViewPager 直接上代码   <android.support.v4.view.ViewPager         android:id="@+...findViewById(R.id.bottom_navigation_bar);         String[] mTitles = new String[]{"首页", "发现", "信息", "的...下,为整个空控件的背景色; BACKGROUND_STYLE_RIPPLE 下为图标和文本被激活或选中的颜色;默认颜色为Color.WHITE   4.自定义Item颜色Individual BottomNavigationItem...,可以设置为0dp,默认为8dp   6.自定义选项图标BottomNavigationItem Icon Customisations   可以设置选项,选中和未选中使用不同的图标   //setInactiveIcon

1.9K50

Android开发之漫漫长途 XIII——Fragment最佳实践

好了,,下面就来实现上图的效果,不过开始之前,首先你必须已经了解Fragment的用法了,如果你对Fragment还比较陌生的话,建议先去阅读前面的一篇文章Android开发之漫漫长途 XII——...--关于底层布局这里使用了Github上的开源项目--> <com.luseen.luseenbottomnavigation.BottomNavigation.BottomNavigationView...其实上面的代码存在性能问题,尤其是底部导航这种场景中,Fragment之间的来回切换,这里使用的replace方法。关于这个方法带来的问题以及如何进行优化,将在下一节详细说明。...Fragment性能问题分析与解决 Fragment性能问题分析 我们上面是使用replace来切换页面,那么每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量...,我们来回切换的操作中,Fragment只实例一次,少了销毁又重新创建等带来的性能消耗,另我们想要在Fragment中更新数据,我们可以自定义Fragment中重写其onHiddenChanged

1.2K20

Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)

那么来看看本文中实现的效果是怎么样的。如果不满意,想也就不浪费你的时间了。 ? ---- 正文   从上面的一些APP主页面,之前这种页面是通过什么来做的呢?...② Activity + Fragment + RadioGroup(RadioButton) + ViewPager。 相信你很多的博客上或者自己的项目上看过或者使用过。...它就不报错了,这句话的意思是未使用导航的许可。因为现在还没有使用这个nav_graph.xml所以要加上这一句话告诉AS,让它放心。等我们真正去使用时,是没有影响的,去不去掉都行。 3....但是这时候又有一个问题,那就是的这个NavHost初始显示哪一个Fragment,这一点Google的人也想到了,可以导航图中指明。 打开nav_graph.xml。...而且使用ViewPager的话就是相当于你把BottomNavigationView替换RadioButton或者TabLayout来使用,这种方式也有很多,就过多的说明了,上高水长,后会有期~

9.3K42

鸿蒙HarmonyOS从零实现类微信app效果——基础界面搭建

Harmony提供了很多种方式可以实现底部导航栏,真实项目使用的话,大家可以直接使用系统提供的方式即可。...WechatMainFrame整体的界面组合使用RelativeContainer进行组合,将BottomNavigation固定于屏幕的底部,内容区域底部BottomNavigation之上,顶部和屏幕顶部对其...@Link装饰器不能在@Entry装饰的自定义组件中使用。@Link子组件从父组件初始化@State的语法为Comp({ aLink: this.aState })。...当我们BottomNavigation中.onClick(() => { this.currentItemIndex = index })点击之后,会更改@Link currentItemIndex...由于我自己也是边学边实现功能逻辑,既要写文章,还要实现代码功能,所以更新大体上控制2~3天更新一篇,文章中尽可能会将我觉得比较重要的知识点拎出来说明。

14110

ViewPager2实现内部Item的动态滚动

我们这是一个视频播放页+详情页,考虑到简单快捷,就想到了一个 ViewPager2 就可以实现,简单又快捷,为自己点赞。一想到如此easy,瞬时笑出了猪叫。...就在以为又可以摸鱼一个ViewPager2就可以搞定之时。突然,产品同学发了新指示,下意识预感不妙。 产品:得加一个第一次使用时的提示啊,要不然用户都不知道页面可以下滑呢?...效果发你了,你看看: 下图为实现好的简单样式,大意体会即可。...需要注意的点 就如我上面最开始分析所述,如果详情页是可滑动的,那么就必须处理一下滑动冲突,相应的方式也很简单,使用内部拦截法,让滑动的View优先获得事件即可,当处于滑动View顶部,再将事件还给父...后续 当然用ViewPager2去写仍然有种大材小用的感觉,毕竟只有两个item,所以,比较好的方式依然是使用自定义的滑动ViewGroup实现,所以我会在下篇博客来以一个自定义的方式来解决此问题

1.5K20

鸿蒙HarmonyOS从零实现类微信app效果——基础界面搭建

Harmony提供了很多种方式可以实现底部导航栏,真实项目使用的话,大家可以直接使用系统提供的方式即可。...这里采用的方式是自己用最基础的代码实现,这样也能联系到一些想要学习的功能,开箱即用是好的,但是也很容易让我们错过很多关键知识。...WechatMainFrame整体的界面组合使用RelativeContainer进行组合,将BottomNavigation固定于屏幕的底部,内容区域底部BottomNavigation之上,顶部和屏幕顶部对其...@Link装饰器不能在@Entry装饰的自定义组件中使用。@Link子组件从父组件初始化@State的语法为Comp({ aLink: this.aState })。...当我们BottomNavigation中.onClick(() => { this.currentItemIndex = index })点击之后,会更改@Link currentItemIndex

12200

Flutter学习笔记:BottomNavigationBar实现多个Navigation

最近研究了一下Flutter,但是使用Navigator的时候遇到了一个很头痛的问题,就是当我们去来回切换导航按钮,Flutter会重新build,从而导致控件重新Build,从而会失去浏览历史。...这个体验肯定是不好的,后来看到了这个文章,终于解决了这个问题。 原文点这里 正文 今天我们将看看Flutter的Navigation。 但不仅仅是任何无聊的Navigation。?...这样我们切换标签不会丢失Navigation历史记录。 如下图: ? multiple-navigators-BottomNavigationBar-animation.gif 如何实现此功能?...是一个自定义控件,使用BottomNavigationBar绘制具有正确颜色的三个选项卡。...不确定这是否是一个模拟器问题,它在真实设备上看起来不错。

4.2K20

Android Metro风格的Launcher开发系列第三篇

因为每一个图标获取焦点放大的时候会与旁边的图标有重叠部分,ViewPager每一页view都是一个FrameLayout,绘制view的时候是按照一定的顺序绘制的,就会遇到焦点view放大后显示的效果是被旁边的...CellView: 如上图所示,每一个正方形的view在这里叫做CellView,它也是一个自定义的view,自定义主要是为了实现: 1、获取焦点放大和丢掉焦点缩小效果,这里是应用了属性动画,ViewPropertyAnimator...,开发遥控器应用时一个很大的问题就是焦点在移动焦点错乱,基本上应用UI bug至少有一半时焦点bug,这个应用为了防止焦点错乱定义了CellView的边界属性,上面的xml文件中isXXEdge就是...,这样焦点移动到边界可以进行Page之间的切换和其他处理,防止焦点在进入每一个page出现错乱。...总结:以上就是Metro风格Launcher实现用了三篇博客来讲解这个应用,所有效果的实现都是自己摸索的,应该还有更好的实现方法,大家可以多多交流提出自己的看法,也可以关注的微信号coder_online

98780

使用TabLayout看这篇就够了

TabItem 高版本的design库里已经有了TabItem,TabItem是作为TabLayout的子View而配合使用的,点进去发现其实代码很简单,就是个自定义View。 ?...所以当我们的需求能够明确知道Tab的个数,可以xml里直接添加TabItem。但是但是,心细的你不知道有没有发现问题在上面的代码中,tab明明设置的小写,但是运行出来确是大写: ?...事先申明可没在代码里重新设置文本,就是这么操蛋。好在天无绝人之路,找到了一个属性叫app:tabTextAppearance,这是Tablayout的属性。...官方推荐我们使用setupWithViewPager()方法,来完成这种Tablayout+Viewpager+Fragment组合的数据绑定,上面的代码实在看不出上面问题,但是的标题呢?...当然这个需求本身还是很简单的,假如不用Tablayout也无非就是写个布局,切换viewpager的时候对应的状态改变。但这里就非要用Tablayout,通过这个例子来说明我们要讲的问题

2.8K30

仿抖音上下滑动分页视频

目录介绍 01.先来看一下需求 02.有几种实现方式 2.1 使用ViewPager 2.2 使用RecyclerView 03.用ViewPager实现 3.1 自定义ViewPager 3.2 ViewPager...具体的滑动效果,可以直接参考抖音…… 02.有几种实现方式 2.1 使用ViewPager 使用ViewPager实现竖直方法上下切换视频分析 1.最近项目需求中有用到需要在ViewPager中播放视频...2.但是没有复用是个最致命的问题onLayout方法中,所有子View会实例化并一字排开在布局上。当Item数量很大,将会是很大的性能浪费。 3.其次是可见性判断的问题。...3.4 修改滑动速度 使用viewPager进行滑动,如果通过手指滑动来进行的话,可以根据手指滑动的距离来实现,但是如果通过setCurrentItem函数来实现的话,则会发现直接闪过去的,会出现一下刷屏...LayoutManager注意点 网上有人已经写了一篇自定义LayoutManager实现抖音的效果的博客,自己也很仔细看了这篇文章。

5.6K20

android 布局 使用 viewPager ,如何解决 和 子页面 长按滑动 冲突问题

使用 viewPager ,如何解决 和 子页面 长按滑动 冲突问题。...问题原型:      这个问题相信遇到的人会比较少, 一个 viewPager 中,其中 一个 fragment 中实现了长按滑动图片的功能,而发现它们两者的 onTouchEvent事件冲突...尝试过的解决方法: 1-----      遇到这问题,首先是百度,百度到的方法有,自定义 viewPager,在里面重写    onTouchEvent  和 onInterceptTouchEvent...第二个页面的 fragment 中实现阻断,这时候,你可能会尝试 fragment 中new 一个 MainActivity 的对象,然后想方设法 获取它 里面的 viewPager,或者是 引入与...然后使用 自定义 viewPager 里面的 函数。      很不幸,上述谈到的方法,都试过了, all failed。

1.4K100

终于来了:Android端个人中心页面滑动冲突优化方案

但是某些时候在此页面会出现滑动冲突的小问题,不太利于用户体验,通过反复的把玩测试,找到了必现的操作,作为一个资深的抖迷和一个非资深的 Android 开发的,产生了钻牛角尖的想法—想看看问题是怎么产生的...问题现象 首页右滑可进入“个人中心”页面,然后底部的 RecylerView 上先左右滑动,但是不触发它们父布局 ViewPager 的切换,然后手指不抬起,进行上下滑动,此时 RecylerView...通过综合分析发现,抖音用的是自定义 LinearLayout 的方式来布局 header + Viewpager + RecyclerView 的,进而通过拦截 LinearLayout 的 disptachTouchEvent...出现问题,用户的手先触发左右滑动,这时候由于 RecyclerView 父布局 ViewPager 中的一些临界判断没被触发,所以没拦截事件,事件还是到了 RecyclerView 中,此时如果再次上下滑动...对文章有何见解,或者有何技术问题,欢迎评论区一起留言讨论!

97820

Android进阶之绘制-自定义View完全掌握(二)

这是自定义View系列的第二篇博客,我们继续来学习关于自定义View的知识。 今天我们来实现一下广告条案例。 我们要实现的是这样的一个效果。 ?...ViewPager在运行之后总共会初始化两个页面,最多初始化三个,随着页面的增多,ViewPager会自动销毁前面的页面进而提供给后面的页面使用,这是ViewPage的内容优化,我们可以来验证一下,初始化和销毁的方法中都打印了日志...,而我们的数据又没有这么多,那么滑动页面的时候肯定会产生索引越界的问题,所以,为了避免这样的问题产生,我们就必须把有页面位置的地方全部取模处理,让其保持我们的有限数据范围内,这样就能够实现我们的需求了...乍一看,好像是没什么问题了,但是,这个程序是有bug的,只是这样我们没有测试出来,再操作一遍。 ? 发现问题了没有,最开始进入程序的时候,右滑是不是滑不动?...整个案例也就结束了,这只是ViewPager使用的一小部分,这个程序还可以加上很多的功能,比如自动播放,然后点击跳转等等,由于篇幅有限,就不一一实现了,感兴趣的可以自己尝试着写一写。

42540

Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

并命名其为“Fragment最佳实践”,作为想到单独使用Fragment的用户来说,这个说法并不夸大,它解决了许多用户使用Fragment产生的这样那样可见或不可见的问题。...我们布局文件中可以这样使用 。...你必须实现一个PagerAdapter来生成这些显示的页面。ViewPager经常和Fragment一起使用。...Fragment可见,即ViewPager中滑动到当前页面,因为已经预加载过了,之前生命周期已经走到onResume() ,所以现在只会回调:setUserVisibleHint()。...ViewPager的网络请求的优化实现 我们使用ViewPager+Fragment显示数据的时候,我们通常会把网络请求的操作放在onCreateView->onResume之间的生命周期内。

1.7K10

Android嵌套滑动冲突的解决方法

二.以前的做法 虽然以前的笔记丢失了,但是当时的解决问题的思路依然记得。...不用CoordinatorLayout还有以下三种解决办法: (1)使用github上面开源的那个自定义CoordinatorLayout来解决,叫什么忘了。...(3)自定义 没办法了,那就用自定义吧,自定义一个VIewGroup实现NestedScrollingParent接口,然后自定义一个View实现NestedScrollingChild接口。...或者你可以外层使用NestedScrollView,内层自定义ViewPager实现NestedScrollingChild接口。 你以为这样就完啦?当然没这么简单。...其实也不是很会里面的细节处理,只是知道流程而已,所以也不装X了。 四.其它使用时的问题 并非解决滑动冲突就没有其它问题

3.1K21

Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:的上一篇博客 Android Metro风格的Launcher开发系列第一篇写了如何配置...Launcher主体框架实现: Launcher主体框架选用的是大家所熟悉的ViewPager控件,因为ViewPager可以很容易做pager之间的切换动画,动画是可以自定义的,这样就轻松搞定滑出屏幕的各种效果...2.Page之间切换效果实现: 每一屏page之间的切换是通过实现ViewPager.PageTransformer接口来实现的,具体这个接口的讲解这里就不介绍了,大家可以参考google官方文档:http...().getInteger(R.integerviewpager_margin)); 总结: 以上就是Launcher主体框架使用ViewPager实现左右滑动和缩放效果讲解,写的不好的地方还请大家指出并批评指正...下一篇博客将会讲解屏幕中每一格CellView实现,有焦点放大效果,实现每一个Focus的CellView悬浮效果和在xml文件中灵活配置关联链接等。

1.2K60
领券