news 2026/7/19 9:27:09

Flex + FlexWrap.Wrap 实现标签流式布局

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flex + FlexWrap.Wrap 实现标签流式布局

前言

在搜索页面中,最近搜索和热门搜索标签使用 Flex 组件和FlexWrap.Wrap实现流式布局,标签可以自动换行。

本文将从源码出发,深入讲解 Flex 流式布局的实现。


一、最近搜索标签

1.1 源码

Flex({ wrap: FlexWrap.Wrap }) { ForEach(this.recentSearches, (tag: string) => { Text(tag) .fontSize(13).fontColor(COLOR_TEXT_MAIN) .backgroundColor(COLOR_CARD_BG) .padding({ left: 14, right: 14, top: 8, bottom: 8 }) .borderRadius(BTN_RADIUS_FULL) .border({ width: 1, color: COLOR_DIVIDER }) .margin({ right: 8, bottom: 8 }) .onClick(() => { this.searchText = tag }) }, (tag: string) => tag) } .width('100%')

二、热门搜索标签

2.1 源码

Grid() { ForEach(HOT_TAGS, (tag: string) => { GridItem() { Row() { SymbolGlyph($r('sys.symbol.flame')).fontSize(14).fontColor([COLOR_PRIMARY]) Text(tag).fontSize(13).fontColor(COLOR_TEXT_MAIN).margin({ left: 6 }) } .width('100%').height(44) .backgroundColor(COLOR_CARD_BG).borderRadius(CARD_RADIUS) .padding({ left: 12, right: 12 }) .onClick(() => { this.searchText = tag }) } }, (tag: string) => tag) } .columnsTemplate('1fr 1fr 1fr') .columnsGap(8).rowsGap(8)

三、Flex 与 Grid 的对比

对比维度FlexGrid
布局方式流式网格
换行方式自动换行固定列数
适用场景标签、按钮组规则网格
对齐方式灵活对齐

四、标签样式

Text(tag) .fontSize(13).fontColor(COLOR_TEXT_MAIN) .backgroundColor(COLOR_CARD_BG) .padding({ left: 14, right: 14, top: 8, bottom: 8 }) .borderRadius(BTN_RADIUS_FULL) // 999 完全圆角 .border({ width: 1, color: COLOR_DIVIDER }) .margin({ right: 8, bottom: 8 })

五、常见问题

5.1 标签不换行

问题:标签超出屏幕宽度时没有换行。

原因:Flex 没有设置wrap: FlexWrap.Wrap

解决方案:确保Flex组件的wrap属性设置为FlexWrap.Wrap


总结

本文通过“海风日记“的搜索标签,深入讲解了 Flex 流式布局:

  1. FlexWrap.Wrap:自动换行
  2. 标签样式:胶囊形、边框、圆角
  3. Grid 热门标签:3 列网格
  4. 点击交互:点击标签填充搜索框

下一篇文章将深入讲解最近搜索与热门搜索双状态切换,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • Flex 组件文档
  • Grid 组件文档
  • 海风日记项目源码
  • [HarmonyOS 开发者官网](https://atomgit.com/openharmony/docs
  • 开源鸿蒙跨平台社区
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 9:26:05

Java StringBuilder在短信批量发送中的高效应用

1. 项目背景与需求解析 在短信营销和通知类业务场景中,我们经常需要处理手机号码的批量发送需求。假设现在有1000个手机号码需要发送相同的营销内容,如果采用单条发送的方式,不仅效率低下,还会对短信网关造成不必要的压力。这时候…

作者头像 李华
网站建设 2026/7/19 9:25:43

三柱式过电压保护器C相测试:原理、方法与故障诊断

在电力系统运维中,过电压保护器的性能测试直接关系到设备安全与电网稳定。近期我们在现场检测三柱式过电压保护器时,发现C相与地相之间的测试数据存在典型特征,这些数据背后隐藏着绝缘性能、动作特性等关键信息。本文将基于实测案例&#xff…

作者头像 李华
网站建设 2026/7/19 9:24:51

打造绘本馆独家特色

不少绘本馆初期依托图书借阅、线下主题活动与故事会完成拓客引流。但随着同业门店持续增多,行业同质化问题愈发突出:统一的图书陈列、同质化故事讲述、千篇一律的手工互动,难以形成自身核心优势。绘本馆要做出差异化,关键在于从“…

作者头像 李华
网站建设 2026/7/19 9:24:40

Unity游戏画面修复:智能去马赛克框架原理与实战

1. 项目概述:当游戏遇上“视觉障碍” 在游戏开发与玩家体验的漫长旅程中,我们总会遇到一些令人哭笑不得的“视觉障碍”。想象一下,你精心打磨的角色模型、耗费心血绘制的场景贴图,在最终呈现时,却被一层模糊的、像素化…

作者头像 李华
网站建设 2026/7/19 9:23:36

Pygame Zero入门:零样板代码实现Python小精灵动画与交互游戏开发

1. 项目概述:为什么选择Pygame Zero作为你的第一个游戏引擎? 如果你是一个Python初学者,或者是一个想带孩子入门编程的家长、老师,又或者你只是想用代码快速做出点有趣的东西,看到“游戏开发”这四个字,可能…

作者头像 李华
网站建设 2026/7/19 9:23:26

就业第一步----学习C语言

我是一名准大二专业自动化的学生,由我对自己的了解,本人并不适合考研深造,于是打算毕业就就业(其实当时选专业就已经有苗头了)。以后想从事偏硬件方面的工作。接下来是我跨出这第一步的原因,目标以及计划。…

作者头像 李华