在 OpenHarmony(ArkUI) 中,列表组件(如 List、Grid)适配屏幕,核心思路是 使用相对布局 / 弹性布局 / 百分比 / 断点适配,避免写死尺寸。下面按常见场景说明。
width('100%') 充满屏幕List() {
// list items
}
.width('100%')
.height('100%')
✅ 列表宽度跟随父容器
✅ 自动适配不同分辨率
layoutWeight 占满剩余空间Column() {
Text('标题').fontSize(20)
List() {
// items
}
.layoutWeight(1)
}
.width('100%')
.height('100%')
✅ 列表自动占据剩余高度
✅ 常用于“顶部固定 + 底部列表”
ListItem() {
Row() {
Text('名称').layoutWeight(1)
Text('详情')
}
.width('100%')
.padding(10)
}
✅ 左右自适应
✅ 避免固定 px
import mediaquery from '@ohos.mediaquery'
let isWide = false
mediaquery.matchMediaSync('(min-width: 600px)').on('change', (m) => {
isWide = m.matches
})
List() {
// items
}
.columns(isWide ? 2 : 1)
✅ 手机 1 列,平板 2 列
✅ 官方推荐做法
Grid() {
// grid items
}
.columnsTemplate(isWide ? '1fr 1fr' : '1fr')
.width('100%')
✅ 使用 fr 自适应列宽
✅ 非常适合卡片列表
List()
.width('100%')
.padding({ top: 10, bottom: 10 })
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
✅ 避免被状态栏 / 导航条遮挡
❌ 写死宽度
.width(360)
❌ 写死高度
.height(800)
❌ 不设置父容器宽高
✅ 父容器用 Column / Row
✅ 列表用 width('100%')
✅ 剩余空间用 layoutWeight
✅ 多列用 columns + fr
✅ 大屏用 mediaquery
如果你有 具体场景(如:手机/平板、横竖屏、聊天列表、商品列表),我可以给你一份完整示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。