#夏日挑战赛# 用OpenHarmony eTS 实现一个Huawei app标准布局 原创 精华
用OpenHarmony eTS 实现一个Huawei app标准布局
目录
1.介绍
Huawei 的app,我们都能看得出来是用心设计过的,值得学习。如果我们仔细去看Huawei 手机自带的app,我们会发现所有的app,无论是什么类型的app,其布局结构都是一种类似的结构,这说明这种布局结构的用途真的可以很广泛,而且体验很好…
像华为的应用市场app、联系人、浏览器、图库、智慧生活app、音乐app、我的华为、畅连 等等,你去看,全部是这种上中下的布局结构,顶部栏(top+middle)+内容展示区(content)+底部tab栏,那么,今天我们就一起来实现一个这样的布局。
2.效果展示
DAYU200真机
视频地址
https://ost.51cto.com/show/13842
模拟器
3.代码讲解
3.1准备工作
1).添加一个用来保存image资源的ets文件,resource_const.ets
为什么要这么做,
一是因为我发现,有时候如果直接这样用,有时候图片就会错乱,显示的不是该图片。
二是用改起来方便。
2).string.json资源文件中定义tab显示文本
接下来就是进入正题了,新建一个ets页面,tabpage.ets
3.2实现一个底部tab栏
1).导入需要用的组件
2).定义tab图标和文本颜色 状态变量
3).接下来看看build() 的布局,
最外层用Column容器布局,然后是Flex布局,top栏,middle,Content都是一行一行的,所以用Row容器布局,先占个位。
底部的tab栏用Flex布局,每个tab用Column布局,Column是上下2层,一个image,一个文本。
5个tab,所以每个tab的width设为20%,为了更美观,给最外层的Column设置个背景图片 。
4).实现点击tab 切换的效果
定义当前操作的tab索引
5).定义切换tab函数switchTab()
设置当前点击tab的选中效果,同时其它tab取消选中效果。该方法还可以继续优化。
6).在点击tab时设置当前操作的tab索引并调用switchTab() 函数
3.3实现一个顶部工具栏
因为我们想实现一个,向上滑动时,隐藏middle栏的内容,在top栏显示缩减版的middle信息。
所以定义一个show_top_title 变量,用于控制top title的显隐,定义一个show_mid_title状态变量控制middle title的显隐。
top栏包含一个文本(初始时不显示),一个搜索按钮,一个添加按钮,我们希望top栏的操作按钮能靠右边,所以注意设置
.alignItems(HorizontalAlign.End)
3.4实现一个Grid网格展示
1).模拟数据列表,该数据来源 NoticeDataModel 的模拟数据,数据结构是一个通知,包括标题和内容,仅用于演示。
2).content 布局使用Grid实现一个网格效果,使用ForEach进行遍历notice_list的数据,
ForEach的使用要注意,最后的部分, item => item.id) , 一般用唯一性的字段赋值,可以提高更改后重新渲染的性能。
.columnsTemplate(‘1fr 1fr’) 可以控制 列格式,显示为2列 ,可以是1列,3列
1列 | 2列 | 3列表 |
---|---|---|
![]() |
![]() |
![]() |
3.当向上滑动content时,隐藏middle的内容,同时显示top栏中的文本内容。
onScrollIndex回调函数
4.思考总结
4.1图标下载
4.2实现屏幕方向的获取
通过resourceManager获取getConfiguration,然后config.direction获取屏幕方向,这部分代码在HarmonyOS可以正常获取,但在OpenHarmony中还无法使用。
5.完整代码
附件可以直接下载
楼主用心的分享也很值得学习。
以后做app就用这个布局了!(^O^)y
获取方向,是否可以用媒体查询代替?
没能理解你意思
就是获取设备是竖屏,还是横屏,用媒体查询来匹配
感谢指点,去了解了一下,完全可以,
https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-methods-media-query-0000001211727455#ZH-CN_TOPIC_0000001211727455__li16426122219256
底部导航栏完全可以封装一个通用的,根据需求创建tab个数,动态计算每个tab的宽