鸿蒙系统—打造通用的底部导航栏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鸿蒙系统—打造通用的底部导航栏相关的知识,希望对你有一定的参考价值。

参考技术A

1、定义一个IBarLayout接口,第一个泛型就是底部导航栏中的每个条目,第二个泛型是每个条目的数据。在接口里面提供一些方法,可以根据数据查找条目,可以添加监听,可以设置默认选中的条目,可以初始化所有的条目,当某个条目被选中后需要告知外界。

2、再定义一个单个条目的接口,泛型就是每个条目的数据,接口里面定义方法,可以设置条目的数据,可以动态修改某个条目的大小

每个条目都有自己的图片、文字、文字的颜色,我们把这些属性定义在一个实体类中。由于颜色可以是整型,也可以是字符串,这里定义泛型,泛型就是文字的颜色。具体是哪种类型的颜色,由调用者来决定。
注意下BarType这个枚举,我们的底部导航栏支持两种类型,IMAGE代表下图,某个条目只显示图片, 也可以让某个条目凸出来,只需要将条目的高度变高即可。

IMAGE_TEXT代表条目显示图片和文字。如下图

1、在布局文件实现单个条目的布局,很简单,使用相对布局,文字位于屏幕的底部,图片位于文字的上面。

1、定义BottomBar,继承相对布局,实现之前定义的IBar接口,泛型就是每个条目所对应的实体类,由于目前并不知道泛型的具体类型,所以泛型直接使用问号来代替。BottomBar就是单个条目。

定义BottomNavigationBar,继承栈布局。第一个泛型就是底部导航栏的条目,第二个泛型就是每个条目的数据

至此,底部导航栏已经封装完成,外界如何使用呢?
1、在布局文件中添加BottomNavigationBar,这个就是我们封装好的底部导航栏

2、在AlibitySlice里面使用,这里使用MVP模式,将业务逻辑放入presenter层中。
先定义接口

3、MainAbilitySlice实现AbilitySliceProvider接口, getContext、getResourceManager、findComponentById这三个方法AbilitySlice的父类已经帮我们实现了,这些方法其实就是系统的方法。getString和getColor需要我们自己来实现,我们在BaseAbilitySlice中手动实现这两个方法。 在MainAbilitySlice的onStart方法中创建MainAbilitySlicePresenter对象,这样就能在MainAbilitySlicePresenter处理具体的业务逻辑。

4、MainAbilitySlicePresenterr处理具体的业务逻辑

5、如果想让某个条目凸出来,可以按照下面的方式

最后附上 源码
注:项目用到的图片全部来源于 阿里矢量图库 ,如果缺少图片,可以阿里矢量图里面找图片。

以上是关于鸿蒙系统—打造通用的底部导航栏的主要内容,如果未能解决你的问题,请参考以下文章

IOS。无论导航栏如何,都进行布局约束以粘合到状态栏底部 + X

使用底部导航栏导航回页面时颤动通过底部导航栏选择的索引

如何一起使用底部导航栏和侧边导航栏,我的侧边导航按钮不显示,而是底部导航

android 底部导航栏

华为底部虚拟导航栏挡住布局

uniapp 底部导航栏设置