在 OpenHarmony(ArkTS / ArkUI)里,“列表组件适配”通常包含屏幕适配、数据适配、交互适配、性能适配几块。下面按常见场景给你一个实用清单。
OpenHarmony 主要用:
示例:
List() {
ForEach(this.dataList, (item) => {
ListItem() {
Text(item.name)
}
})
}
推荐用 vp(虚拟像素)和 fp(字体像素),系统会自动适配:
Text('标题')
.fontSize(16) // 默认 fp
.padding(12) // 默认 vp
import display from '@ohos.display'
let screenWidth = display.getDefaultDisplaySync().width
或使用:
import { mediaQuery } from '@kit.ArkUI'
let isWide = mediaQuery.matchMediaSync('(min-width: 600vp)').matches
Grid() {
ForEach(this.dataList, item => {
GridItem() {
Text(item.name)
}
})
}
.columnsTemplate('1fr 1fr')
focusable、onFocus)ForEach(this.list, item => {
ListItem() { ... }
}, item => item.id)
大数据必用
LazyForEach(this.dataSource, item => {
ListItem() {
Text(item.title)
}
})
需要自定义 IDataSource:
class MyDataSource implements IDataSource {
totalCount(): number
getData(index: number): any
registerDataChangeListener()
unregisterDataChangeListener()
}
import { window } from '@kit.ArkUI'
window.on('windowSizeChange', (size) => {
// 重新设置列数
})
或使用:
Grid().columnsTemplate(
this.isLandscape ? '1fr 1fr 1fr' : '1fr'
)
ListItem()
.focusable(true)
.onFocus(() => {})
.onBlur(() => {})
❌ 不用 key 导致重渲染
❌ 万级数据用 ForEach
❌ 写死 px
❌ 平板直接复用手机布局
如果你能补充说明:
我可以给你直接可抄的代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。