鸿蒙 next 实现知识点列表的重复布局
1.在应用启动时通过 updateBreakpoint获取当前窗口尺寸断点
private updateBreakpoint(windowWidth: number): void {
try {
let windowWidthVp = windowWidth / display.getDefaultDisplaySync().densityPixels
console.log('run get windowWidthVp', windowWidthVp)
let newBp: string = ''
if (windowWidthVp < 600) {
newBp = 'sm'
} else if (windowWidthVp < 840) {
newBp = 'md'
} else {
newBp = 'lg'
}
if (this.curBp !== newBp) {
this.curBp = newBp
AppStorage.setOrCreate('currentBreakpoint', this.curBp)
}
} catch (err) {
console.log("getDisplayByIdSync failed err" + err.code)
}
}
2.实现通用的断点工具类
declare interface BreakPointTypeOption<T> {
sm?: T
md?: T
lg?: T
}
export class BreakPointType<T> {
options: ESObject
constructor(option: BreakPointTypeOption<T>) {
this.options = option
}
getValue(currentBreakPoint: string): T {
return this.options[currentBreakPoint] as T
}
}
3.知识点列表的重复布局,手机端为每行一列,平板端为每行3列。
GridRow({
gutter: Utils.getVp(23)
}) {
ForEach(this.knowledgeDataList, (item: KnowledgeItem, tempIndex) => {
GridCol({ span: { sm: 12, md: 6, lg: 4 } }) {
KnowledgeListItemLayout({ knowledgeInfo: item, level: 0 });
}
})
}