openharmony-ui-reference
npx skills add https://github.com/mengfei0053/skills --skill openharmony-ui-reference
Agent 安装分布
Skill 文档
OpenHarmony UI å¿«éåè
æ¦è¿°
OpenHarmony ä½¿ç¨ ArkTS (åºäº TypeScript ç声æå¼ UI) æ¥æå»ºç¨æ·çé¢ãæ ¸å¿æ¦å¿µ:声æå¼ UI æè¿°ãç»ä»¶åæ¶æãç¶æç®¡çè£ é¥°å¨ãååºå¼å¸å±ã
宿¹ææ¡£: docs-OpenHarmony-v6.0-Release/zh-cn/application-dev/ui/
å¿«éåè: docs/ (æ¬å°æåçæ ¸å¿ææ¡£)
ç¶æç®¡ç
V2 (æ¨èç¨äºæ°é¡¹ç®)
| è£ é¥°å¨ | ç¨é | ä½ç¨å |
|---|---|---|
@Local |
ç»ä»¶å é¨ç¶æ | ä» ç»ä»¶å é¨ |
@Param |
ç¶ â å (åå) | ç¶å°å |
@Event |
å â ç¶åè° | åå°ç¶ |
@Provider/@Consumer |
è·¨ç»ä»¶åæ¥ | ä»»æå代ç»ä»¶ |
ååç»å®:
// ç¶ç»ä»¶
@ComponentV2
struct Parent {
@Local text: string = ''
build() {
Child({ text: this.text, onTextChange: (val) => { this.text = val } })
}
}
// åç»ä»¶
@ComponentV2
struct Child {
@Param text: string
@Event onTextChange: (val: string) => void
build() {
TextInput({ text: this.text })
.onChange((val) => this.onTextChange(val))
}
}
// è¯æ³ç³(æ´ç®å)
TextInput({ text: $$this.text })
V1 (ä¼ ç»æ¹å¼)
| è£ é¥°å¨ | ç¨é | ä½ç¨å |
|---|---|---|
@State |
ç»ä»¶å é¨ç¶æ | ä» ç»ä»¶å é¨ |
@Prop |
ç¶ â å (åå) | ç¶å°å |
@Link |
ç¶ â å (åå) | ååç»å® |
@Provide/@Consume |
è·¨ç»ä»¶åæ¥ | ä»»æå代ç»ä»¶ |
ææ¡£åè: docs/state-management/arkts-state-management-overview.md
å¸å±
| éæ± | ç»ä»¶ | å ³é®å±æ§ | ææ¡£ |
|---|---|---|---|
| æ°´å¹³æå | Row |
space, alignItems, justifyContent | docs/layout/arkts-layout-development-linear.md |
| åç´æå | Column |
space, alignItems, justifyContent | docs/layout/arkts-layout-development-linear.md |
| å±å å¸å± | Stack |
alignContent | docs/layout/arkts-layout-development-stack-layout.md |
| å¼¹æ§å¸å± | Flex |
direction, wrap, justifyContent | docs/layout/arkts-layout-development-flex-layout.md |
| ç¸å¯¹å¸å± | RelativeContainer |
x/y è§å | docs/layout/arkts-layout-development-relative-layout.md |
| ç½æ ¼å¸å± | Grid/GridItem |
columnsTemplate, rowsTemplate | docs/layout/arkts-layout-development-grid-layout.md |
| æ ç¾é¡µ | Tabs/TabContent |
barPosition, scrollable | docs/navigation/arkts-navigation-tabs.md |
| å表 | List/ListItem |
space, scrollBar | docs/layout/arkts-layout-development-create-list.md |
| ç叿µ | WaterFlow/FlowItem |
columnsTemplate | docs/layout/arkts-layout-development-create-waterflow.md |
å å®¹å± ä¸:
Column() {
Text('Centered')
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
ææ¡£åè: docs/layout/arkts-layout-development-overview.md
常ç¨ç»ä»¶
| ç»ä»¶ | ç¨é | ææ¡£ |
|---|---|---|
| Text | æ¾ç¤ºææ¬ | docs/components/arkts-common-components-text-display.md |
| TextInput | åè¡è¾å ¥ | docs/components/arkts-common-components-text-input.md |
| TextArea | å¤è¡è¾å ¥ | docs/components/arkts-common-components-text-input.md |
| Button | å¯ç¹å»æé® | docs/components/arkts-common-components-button.md |
| Image | æ¾ç¤ºå¾ç | docs/components/arkts-graphics-display.md |
| List | åç´æ»å¨å表 | docs/layout/arkts-layout-development-create-list.md |
| Grid | ç½æ ¼å¸å± | docs/layout/arkts-layout-development-create-grid.md |
| Swiper | è½®æå¾ | docs/layout/arkts-layout-development-create-looping.md |
| RichEditor | 坿æ¬ç¼è¾å¨ | docs/components/arkts-common-components-richeditor.md |
导èª
Navigation (æ¨è):
@Entry
@Component
struct NavPage {
@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()
build() {
Navigation(this.pageInfos) {
Column() {
Button('Go to Page2')
.onClick(() => {
this.pageInfos.pushPath({ name: 'Page2' })
})
}
}
.title('Main Page')
}
}
Router (ä¼ ç»æ¹å¼):
import router from '@ohos.router'
// 跳转页é¢
router.pushUrl({ url: 'pages/Page2' })
// è¿å
router.back()
ææ¡£åè:
- Navigation:
docs/navigation/arkts-navigation-navigation.md - Router:
docs/navigation/arkts-routing.md
å¯¹è¯æ¡åå¼¹çª
| ç±»å | æ¹æ³ | 使ç¨åºæ¯ | ææ¡£ |
|---|---|---|---|
| èªå®ä¹å¯¹è¯æ¡ | openCustomDialog() |
æ¨è | docs/uicontext/arkts-uicontext-custom-dialog.md |
| è¦åå¯¹è¯æ¡ | AlertDialog.show() |
ç®å确认 | docs/dialogs/arkts-base-dialog-overview.md |
| åè¡¨éæ© | ActionSheet.show() |
é项鿩 | docs/dialogs/arkts-base-dialog-overview.md |
| å¼¹çª | .bindPopup() |
ç»å®å°ç»ä»¶ | docs/popup/arkts-popup-and-menu-components-popup.md |
| æç¤º | prompt.showToast() |
ç®çåé¦ | docs/popup/arkts-create-toast.md |
å¨ç»
| ç±»å | API | 使ç¨åºæ¯ | ææ¡£ |
|---|---|---|---|
| 屿§å¨ç» | .animateTo() |
å¹³æ»å±æ§åå | docs/animation/arkts-attribute-animation-overview.md |
| 转åºå¨ç» | .transition() |
è¿åºåºå¨ç» | docs/animation/arkts-transition-overview.md |
| ç»ä»¶å¨ç» | animateTo |
ç»åå¤ä¸ªå¨ç» | docs/animation/arkts-component-animation.md |
// 屿§å¨ç»
@State scale: number = 1
Image($r('app.media.icon'))
.scale({ x: this.scale, y: this.scale })
.onClick(() => {
animateTo({ duration: 300 }, () => {
this.scale = this.scale === 1 ? 1.5 : 1
})
})
æ¸²ææ§å¶
| æ§å¶æ¹å¼ | è¯æ³ | 使ç¨åºæ¯ | ææ¡£ |
|---|---|---|---|
| æ¡ä»¶æ¸²æ | if (condition) { } else { } |
æ¾ç¤º/éèç»ä»¶ | docs/state-management/arkts-rendering-control-ifelse.md |
| å¾ªç¯æ¸²æ | ForEach(arr, (item) => {}, (item) => key) |
渲æå表 | docs/state-management/arkts-rendering-control-foreach.md |
| æå è½½å¾ªç¯ | LazyForEach(dataSource, (item) => {}) |
å¤§æ°æ®é | docs/state-management/arkts-rendering-control-lazyforeach.md |
// ForEach (å§ç»æä¾å¯ä¸é®)
ForEach(this.items, (item: Item) => {
Text(item.name)
}, (item: Item) => item.id)
æ ·å¼
@Styles (å¯å¤ç¨æ ·å¼):
@Styles
function cardStyle() {
.backgroundColor(Color.White)
.borderRadius(12)
.padding(16)
}
Column() {}
.cardStyle()
@Extend (æ©å±ç»ä»¶):
@Extend(Text)
function redText() {
.fontSize(18)
.fontColor(Color.Red)
}
Text('Hello')
.redText()
ææ¡£åè: docs/state-management/arkts-style.md
å¸¸ç¨æ¨¡å¼
带çå½å¨æçèªå®ä¹ç»ä»¶:
@ComponentV2
struct CustomComponent {
@Local count: number = 0
aboutToAppear() {
console.log('Component will appear')
}
aboutToDisappear() {
console.log('Component will disappear')
}
build() {
Text(`Count: ${this.count}`)
}
}
@Builder (å¯å¤ç¨ UI çæ®µ):
@Builder
function TitleBar(title: string) {
Row() {
Text(title)
.fontSize(20)
.fontWeight(FontWeight.Bold)
}
.width('100%')
.padding(16)
}
// 使ç¨
Column() {
TitleBar({ title: 'My Page' })
}
ææ¡£åè: docs/state-management/arkts-builder.md
é®é¢ææ¥
| çç¶ | 常è§åå | è§£å³æ¹æ³ |
|---|---|---|
| ç¶æåå䏿´æ° UI | 缺å°è£ é¥°å¨ | æ·»å @Local (V2) æ @State (V1) |
| åç»ä»¶æªæ¥æ¶æ´æ° | 使ç¨ååèéååç»å® | æ·»å @Event åè° (V2) æä½¿ç¨ @Link (V1) |
| åµå¥å¯¹è±¡ä¸ååº | ç¼ºå°æ·±åº¦è§å¯ | æ·»å @ObservedV2/@Trace (V2) æ @Observed/@ObjectLink (V1) |
| ä¸å¿ è¦ç鿏²æ | æ¬å°ç¶æä¸æå¤§å¯¹è±¡ | 对ä¸å¯å屿§ä½¿ç¨ @Param |
| ForEach 渲æé®é¢ | 缺å°å¯ä¸é® | å§ç»æä¾å¯ä¸é®çæå¨ |
| 导èªä¸å·¥ä½ | ä½¿ç¨ Router èé Navigation | ä½¿ç¨ NavPathStack API |
| å¯¹è¯æ¡ä¸æ¾ç¤º | ç¼ºå° UI ä¸ä¸æ | ä½¿ç¨ getUIContext().openCustomDialog() |
ææ¡£åè:
- V2 ç¶æç®¡ç:
docs/state-management/arkts-mvvm-V2.md - V1 ç¶æç®¡ç:
docs/state-management/arkts-mvvm.md
éè¦æç¤º
- å§ç»æä¾å¯ä¸é® ç»
ForEach以é¿å 渲æé®é¢ - æ°é¡¹ç®ä½¿ç¨ V2 ç¶æç®¡ç (
@Local,@Param) - ä¼å ä½¿ç¨ Navigation èé Router è¿è¡é¡µé¢è·¯ç±
- å°½å¯è½ä½¿ç¨
$$è¯æ³ ç®åååç»å® - å¤§æ°æ®éä½¿ç¨ LazyForEach (> 1000 项)
- å¨ä¸åå±å¹å°ºå¯¸ä¸æµè¯ 使ç¨åªä½æ¥è¯¢
æ´å¤åè
宿¹ææ¡£: docs-OpenHarmony-v6.0-Release/zh-cn/application-dev/ui/
æ¬å°å¿«éåè: docs/
æ ¸å¿ææ¡£:
- UI æ¦è§:
docs/overview/arkts-ui-development-overview.md - ç¶æç®¡ç:
docs/state-management/arkts-state-management-overview.md - å¸å±å¼å:
docs/layout/arkts-layout-development-overview.md - ç»ä»¶åº:
docs/components/arkts-common-components-text-display.mdåç¸å ³æä»¶ - 导èª:
docs/navigation/arkts-navigation-navigation.md - å¨ç»:
docs/animation/arkts-attribute-animation-overview.md