【HarmonyOS】ArkUI - 页面布局(Column、Row)

由于 CSDN 的 Markdown 有 Bug,所以文章显示效果会有些许问题,完整版已上传到 GitHub

一、线性布局组件

  1. Column 容器

    从上到下,纵向排列

    示例:

    Column() {
      Text('文字一')
      Text('文字二')
      Text('文字三')
      Text('文字四')
      Text('文字五')
    }
    

    效果:
    请添加图片描述

  2. Row 容器

    从左到右,横向排列

    示例:

    Row() {
      Text('文字一')
      Text('文字二')
      Text('文字三')
      Text('文字四')
      Text('文字五')
    }
    

    效果:
    请添加图片描述

二、常见布局属性

请添加图片描述

<think>好的,我现在需要处理用户关于HarmonyOS ArkUI菜谱App页面布局的请求。用户希望看到包含ColumnRow、Stack、Grid、List、Swiper、Tabs等组件的代码示例。首先,我得回忆一下这些组件在ArkUI中的用法和常见布局结构。 首先,用户可能想要一个综合示例,展示这些组件如何协同工作。比如,主页面可能使用Tabs来切换不同的部分,每个标签页里可能有不同的布局结构。例如,首页用Swiper做轮播图,接着用Grid展示推荐菜谱,再用List显示最新菜谱。另一个标签页可能用ColumnRow组合成表单布局,或者详情页使用Stack进行层叠。 接下来,我需要确保代码结构正确,符合ArkUI的语法。例如,每个页面组件需要@Entry和@Component装饰器,使用build()方法构建UI。Tabs组件通常包含多个TabContent子组件,每个对应一个标签页。Swiper内部有多个SwiperItem,每个代表一页轮播图。Grid则需要指定columnsTemplate和rowsTemplate,并用ForEach循环渲染项目。 还要注意布局的嵌套关系,比如在Column里放置Row,或者在Stack中叠加元素。例如,详情页的封面图可能用Stack将图片和文字叠加在一起。同时,样式设置如宽度、高度、对齐方式等也需要正确应用,比如使用justifyContent和alignItems来调整布局。 然后,我需要检查是否所有用户提到的组件都包含在内。Tabs用于切换,Swiper做轮播,Grid展示网格,List列表,以及ColumnRow、Stack的嵌套使用。可能需要一个主页面展示Tabs,每个标签页里包含不同的布局结构,比如首页、分类、收藏和个人中心。另外,考虑到用户可能希望代码可以直接参考或修改,示例应该简洁但完整,包含必要的导入语句和结构。同时,注释可以帮助用户理解各部分的作用。例如,在轮播图中使用Swiper,每个SwiperItem包含一张图片;在Grid中使用ForEach循环生成菜谱项。最后,生成相关问题,帮助用户深入理解,比如性能优化、组件交互或数据绑定。这些问题应该与布局和组件使用相关,比如如何优化Grid的渲染效率,或者如何实现页面跳转。现在,将这些思考整合成一个结构清晰的代码示例,确保每个组件都正确使用,并添加注释说明。同时,验证代码是否符合HarmonyOSArkUI的最新语法,避免过时的方法或属性。完成后,再检查是否遗漏了用户提到的任何组件,并确保布局示例的多样性和实用性。</think>基于HarmonyOS ArkUI的菜谱App典型页面布局示例(包含常用组件): ```javascript // 主页布局 @Entry @Component struct RecipeMainPage { @State currentTab: number = 0 @State swiperIndex: number = 0 build() { Tabs({ barPosition: BarPosition.Bottom }) { // 首页标签 TabContent() { Column() { // 轮播图区域 Swiper() { SwiperItem() { Image($r('app.media.banner1')) .width('100%') .height(200) } SwiperItem() { Image($r('app.media.banner2')) .width('100%') .height(200) } } .autoPlay(true) .interval(3000) .indicator(true) .width('100%') // 分类网格 Grid() { ForEach([1,2,3,4,5,6], (item) => { GridItem() { Column() { Image($r('app.media.category_icon')) .width(40) .height(40) Text("分类" + item) .fontSize(14) } } }) } .columnsTemplate('1fr 1fr 1fr') .rowsTemplate('1fr 1fr') .columnsGap(10) .rowsGap(10) .padding(10) // 推荐列表 List({ space: 10 }) { ForEach([1,2,3,4,5], (item) => { ListItem() { Row() { Image($r('app.media.recipe_thumb')) .width(80) .height(80) .margin({ right: 10 }) Column() { Text("红烧肉") .fontSize(18) Text("烹饪时间:30分钟") .fontColor('#999') } } .width('100%') .padding(10) } }) } .layoutWeight(1) } }.tabBar('首页') // 收藏页面 TabContent() { Stack() { List() { // 收藏列表项 } FloatingButton() .position({ x: '80%', y: '80%' }) } }.tabBar('收藏') } .width('100%') .height('100%') } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tyhoo Wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值