
回复
鸿蒙Next的容器组件如同灵活的建筑模块,助开发者构建适配多设备的弹性布局。本文解析Row/Column/Flex核心能力,附自适应与响应式布局实战技巧~
justifyContent
(对齐方式)、spacing
(间距)alignItems
(交叉轴对齐)、flexDirection
(排列方向)direction
属性动态切换水平/垂直flexGrow
(拉伸比例)、flexShrink
(收缩比例)能力 | 实现方式 | 代码示例(关键片段) |
---|---|---|
弹性拉伸 | flexGrow: 1 让组件占满剩余空间 |
Blank().flexGrow(1) |
均匀分布 | justifyContent: FlexAlign.SpaceEvenly |
.justifyContent(FlexAlign.SpaceEvenly) |
比例分配 | 宽度设为百分比或layoutWeight |
.width('30%') / .layoutWeight(2) |
@Entry
@Component
struct AdaptiveLayout {
build() {
Row() {
Text('固定区').width(100).height(50).bgColor('#FFD700')
Blank().flexGrow(1) // 弹性填充剩余空间
Toggle().width(36).height(20)
}
.width('80%')
.height(50)
.bgColor('#FFFFFF')
}
}
效果:Toggle与固定文本间的Blank组件会随父容器宽度变化自动拉伸
@Entry
@Component
struct ResponsiveDemo {
build() {
GridRow() {
// 小屏占满,大屏占2/3
GridCol({ span: { sm: 12, md: 8 } }) {
Flex({ direction: FlexDirection.Row }) {
Image().width(120).height(80)
Column() {
Text('头条新闻').fontSize(18)
Text('简介...').opacity(0.6)
}.flexGrow(1)
}
}
// 大屏右侧占1/3
GridCol({ span: { sm: 12, md: 4 } }) {
Text('热门推荐').fontSize(16)
}
}
.onBreakpointChange(() => { /* 断点切换逻辑 */ })
}
}
@ohos.window.info
监听方向变化,动态调整flexDirection
if-else
根据设备类型(手机/平板)加载不同布局组件Stack
替代多层Column+Row
@Builder
组件,减少重复代码LazyForEach
延迟渲染flexGrow
/百分比宽度应对屏幕变化