当前位置:   article > 正文

鸿蒙学习必备【建议收藏】—ArkUI组件开发常见问题(ArkTS)_arkets怎么给弹窗传参

arkets怎么给弹窗传参

自定义弹窗能否在ts文件中定义和使用(API 9)

自定义弹窗的定义和初始化需要用到属于ArkTS语法内容,必须在ets后缀文件中定义使用,不能在ts后缀文件中定义使用。

自定义弹窗中的变量如何传递给页面(API 9)

问题现象

在自定义弹窗内定义的变量内容,在关闭弹窗或变量变化时需要及时传递给页面,可以通过何种方式传递?

解决措施

  • 方式一:使用组件的状态变量传递。

  • 方式二:在初始化弹窗时,传递一个方法给自定义弹窗,在自定义弹窗中触发该方法,弹窗中变量作为方法的参数。

  • 方式三:使用AppStorage或LocalStorage方式管理页面状态,实现自定义弹窗和页面之间状态的共享。

代码示例

  • 方式一:

    1. @CustomDialog
    2. struct CustomDialog01 {
    3. @Link inputValue: string
    4. controller: CustomDialogController
    5. build() {
    6. Column() {
    7. Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
    8. TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
    9. .onChange((value: string) => {
    10. this.inputValue = value
    11. })
    12. }
    13. }
    14. }
    15. @Entry
    16. @Component
    17. struct DialogDemo01 {
    18. @State inputValue: string = 'click me'
    19. dialogController: CustomDialogController = new CustomDialogController({
    20. builder: CustomDialog01({
    21. inputValue: $inputValue
    22. })
    23. })
    24. build() {
    25. Column() {
    26. Button(this.inputValue)
    27. .onClick(() => {
    28. this.dialogController.open()
    29. }).backgroundColor(0x317aff)
    30. }.width('100%').margin({ top: 5 })
    31. }
    32. }
  • 方式二:

    1. @CustomDialog
    2. struct CustomDialog02 {
    3. private inputValue: string
    4. changeInputValue: (val: string) => void
    5. controller: CustomDialogController
    6. build() {
    7. Column() {
    8. Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
    9. TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
    10. .onChange((value: string) => {
    11. this.changeInputValue(value)
    12. })
    13. }
    14. }
    15. }
    16. @Entry
    17. @Component
    18. struct DialogDemo02 {
    19. @State inputValue: string = 'click me'
    20. dialogController: CustomDialogController = new CustomDialogController({
    21. builder: CustomDialog02({
    22. inputValue: this.inputValue,
    23. changeInputValue: (val: string) => {
    24. this.inputValue = val
    25. }
    26. })
    27. })
    28. build() {
    29. Column() {
    30. Button(this.inputValue)
    31. .onClick(() => {
    32. this.dialogController.open()
    33. }).backgroundColor(0x317aff)
    34. }.width('100%').margin({ top: 5 })
    35. }
    36. }
  • 方式三:

    1. let storage = LocalStorage.GetShared()
    2. @CustomDialog
    3. struct CustomDialog03 {
    4. @LocalStorageLink('inputVal') inputValue: string = ''
    5. controller: CustomDialogController
    6. build() {
    7. Column() {
    8. Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
    9. TextInput({ placeholder: '', text: this.inputValue }).height(60).width('90%')
    10. .onChange((value: string) => {
    11. this.inputValue = value;
    12. })
    13. }
    14. }
    15. }
    16. @Entry(storage)
    17. @Component
    18. struct DialogDemo03 {
    19. @LocalStorageLink('inputVal') inputValue: string = ''
    20. dialogController: CustomDialogController = new CustomDialogController({
    21. builder: CustomDialog03()
    22. })
    23. build() {
    24. Column() {
    25. Button(this.inputValue)
    26. .onClick(() => {
    27. this.dialogController.open()
    28. }).backgroundColor(0x317aff)
    29. }.width('100%').margin({ top: 5 })
    30. }
    31. }

如何获取组件的宽高(API 9)

问题现象

组件的宽高信息用于计算布局区域大小以及偏移量等内容,如何获取宽高信息?

解决措施

  • 方式一:使用组件区域变化事件onAreaChange,在组件初始化或组件尺寸发生变化时触发。

  • 方式二:在点击或触摸事件中,事件的回调信息中存在目标元素的区域信息。

如何一键清空TextInput、TextArea组件内容(API 9)

问题现象

TextInput,TextArea组件输入多字符后,需要实现点击清空。

解决措施

将状态变量赋值给TextInput或TextArea组件的text属性,在做点击清空事件时为状态变量赋值空字符串。

代码示例

  1. struct Index {
  2. @State text: string = 'Hello World'
  3. controller: TextInputController = new TextInputController()
  4. build() {
  5. Row() {
  6. Column() {
  7. TextInput({ placeholder: 'Please input your words.', text: this.text,
  8. controller:this.controller}).onChange((value) => {
  9. this.text = value
  10. })
  11. Button("Clear TextInput").onClick(() => {
  12. this.text = "";
  13. })
  14. }
  15. .width('100%')
  16. }
  17. .height('100%')
  18. }
  19. }

如何设置自定义弹窗位置(API 9)

问题现象

自定义弹窗当前默认在窗口居中显示,当自定义弹窗需要与窗口边框对齐是需要设置自定义弹窗的对齐方式。

解决措施

初始化自定义弹窗时,通过alignment参数设置对齐方式,通过offset设置弹窗偏移量。

如何隐藏容器组件的溢出内容(API 9)

问题现象

当容器组件内容溢出时,表现为子组件边缘超出容器组件,需要进行隐藏设置。

解决措施

将通用属性-形状裁剪clip属性设置为true,表示按照容器边缘轮廓进行裁剪。此属性默认为false,表示不进行裁剪隐藏。

自定义弹窗大小如何自适应内容(API 9)

问题现象

当自定义弹窗中存在可变化区域大小的子组件时,弹窗大小需要跟随自适应。

解决措施

  • 方式一:采用弹窗容器默认样式。在默认样式中,弹窗容器高度自适应子节点,最大可为窗口高度的90%;弹窗容器的宽度根据栅格系统自适应,不跟随子节点变化。

  • 方式二:当显示设置customStyle为true时,弹窗宽高跟随子节点内容适应。

如何理解自定义弹窗中的gridCount参数(API 9)

gridCount参数是指弹窗宽度占栅格列数的个数。系统把窗口宽等分,等分的份数即为栅格列数,不同设备栅格列数不同。假设设备屏幕密度值在320vp<=水平宽度<600vp,所以栅格列数是4,则gridCount的有效值在[1, 4]。

注意:仅采用弹窗默认样式时设置有效。

如何去除自定义弹窗的白色背景(API 9)

问题现象

使用自定义弹窗时,默认样式中存在白色背景。

解决措施

需要采用自定义样式来消除自定义弹窗的白色背景:

  1. 在初始化自定义弹窗时设置customStyle为true。

  2. 在定义弹窗时设置组件背景色backgroundColor。

TextInput组件密码模式下,右边的眼睛图标能否支持自定义(API 9)

问题现象

TextInput组件设置type为InputType.Password时,右侧出现眼睛图标,不能修改图标样式。

解决措施

当前图标不支持自定义,可使用TextInput的showPasswordIcon属性隐藏图标,使用Image组件替代控制TextInput组件的type。

TextInput的onSubmit事件如何使用(API 9)

问题现象

TextInput的onSubmit事件怎么触发,以及事件回调的参数类型代表的含义。

解决措施

onSubmit事件在外接键盘或软键盘回车时触发该回调,回调的参数为当前软键盘回车键类型。通过TextInput的enterKeyType属性可以设置输入法回车键类型,软键盘回车键样式需要输入法的支持。

TextInput在聚焦时如何使光标回到起点(API 9)

问题现象

TextInput组件在聚焦时,光标位置会自动根据触摸点位置变化,如何使得聚焦时光标固定显示在起点位置?

解决措施

  1. TextInput组件绑定onEditChange事件,该事件TextInput可进行输入时触发。

  2. 在事件回调用TextInputController.caretPosition方法设置光标位置,不过需要用到setTimeout延迟方法。

代码示例

  1. @Entry
  2. @Component
  3. struct TextInputDemo {
  4. controller: TextInputController = new TextInputController()
  5. build() {
  6. Column() {
  7. TextInput({ controller: this.controller })
  8. .onEditChange((isEditing: boolean) => {
  9. if (isEditing) {
  10. setTimeout(() => {
  11. this.controller.caretPosition(0)
  12. }, 100)
  13. }
  14. })
  15. }
  16. }
  17. }

如何获取可滚动组件的当前滚动偏移量(API 9)

问题现象

可滚动组件包含List,Grid,Scroll等,在发生滚动时如何获取滚动偏移量?

解决措施

  1. 可滚动组件在初始化时可设置scroller参数,绑定滚动控制器。

  2. 通过控制器的currentOffset方法可获取水平和竖直方向的滚动偏移量。

如何实现文本竖向排列(API 9)

问题现象

使用Text组件时,无法将文本排列方向设置为竖向排列。

解决措施

Text组件当前文本排列方向固定为横向排列,要设置为竖向排列,可将文件拆分,使用Flex容器组件装填,设置主轴方向为竖向。

代码示例

  1. @Entry
  2. @Component
  3. struct Index15 {
  4. private message: string = '本文档适用于应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用,快速了解工程目录的主要文件,熟悉应用开发流程。';
  5. build() {
  6. Flex({ direction: FlexDirection.Column, wrap: FlexWrap.Wrap }) {
  7. ForEach(this.message.split(''), (item, index) => {
  8. Text(item)
  9. .fontSize(30)
  10. .flexShrink(0)
  11. })
  12. }
  13. }
  14. }

如何将Ability的UI界面设置成透明(API 9)

问题现象

如何设置Ability的UI界面为透明

解决措施

将最上层容器组件背景色设置为透明,然后通过设置XComponent组件的opacity属性值为0.01来实现。

示例:

  1. build() {
  2. Stack() {
  3. XComponent({
  4. id: 'componentId',
  5. type: 'surface',
  6. })
  7. .width('100%')
  8. .height('100%')
  9. .opacity(0.01)
  10. // 页面内容
  11. }
  12. .width('100%')
  13. .height('100%')
  14. .backgroundColor('rgba(255,255,255, 0)')
  15. }

constraintSize尺寸设置不生效(API 9)

适用于Stage模型。

问题现象

constraintSize约束组件尺寸时,子组件内设置百分比宽度,例如width(‘100%’)会采用constraintSize约束中的最大宽乘百分比,导致撑开组件,看起来constraintSize设置没生效。

解决措施

可以在外层使用Scroll组件,设置constraintSize,当子组件占用空间超过设置的约束值时,会显示滚动条。

如何将背景颜色设置为透明(API 9)

解决措施

将backgroundColor设置为 ‘#00000000’。

Scroll组件滚动到达不了最底部(API 9)

适用于Stage模型。

问题现象

Scroll组件在未设置高度情况下,默认为窗口高度,当滚动区域外存在其他组件时,滚动底部区域会出现遮挡。

解决措施

Scroll组件需要设置Scroll高度,或者使用Flex布局限制Scroll高度。

如何自定义Video组件控制栏样式(API 9)

适用于Stage模型。

解决措施

  1. 通过设置属性controls为false关闭默认控制栏。

  2. 设置Video组件的controller。

  3. 通过ArkTS实现自定义的控制栏,并通过VideoController控制视频播放。

代码示例

  1. // xxx.ets
  2. @Entry@Componentstruct VideoCreateComponent {
  3. @State videoSrc: Resource = $rawfile('video1.mp4')
  4. @State previewUri: Resource = $r('app.media.poster1')
  5. @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  6. @State isAutoPlay: boolean = false
  7. @State showControls: boolean = true
  8. controller: VideoController = new VideoController()
  9. build() {
  10. Column() {
  11. Video({
  12. src: this.videoSrc,
  13. previewUri: this.previewUri,
  14. currentProgressRate: this.curRate,
  15. controller: this.controller
  16. }).width('100%').height(600)
  17. .autoPlay(this.isAutoPlay)
  18. .controls(this.showControls)
  19. .onStart(() => {
  20. console.info('onStart')
  21. })
  22. .onPause(() => {
  23. console.info('onPause')
  24. })
  25. .onFinish(() => {
  26. console.info('onFinish')
  27. })
  28. .onError(() => {
  29. console.info('onError')
  30. })
  31. .onPrepared((e) => {
  32. console.info('onPrepared is ' + e.duration)
  33. })
  34. .onSeeking((e) => {
  35. console.info('onSeeking is ' + e.time)
  36. })
  37. .onSeeked((e) => {
  38. console.info('onSeeked is ' + e.time)
  39. })
  40. .onUpdate((e) => {
  41. console.info('onUpdate is ' + e.time)
  42. })
  43. Row() {
  44. Button('src').onClick(() => {
  45. this.videoSrc = $rawfile('video2.mp4') // 切换视频源
  46. }).margin(5)
  47. Button('previewUri').onClick(() => {
  48. this.previewUri = $r('app.media.poster2') // 切换视频预览海报
  49. }).margin(5)
  50. Button('controls').onClick(() => {
  51. this.showControls = !this.showControls // 切换是否显示视频控制栏
  52. }).margin(5)
  53. }
  54. Row() {
  55. Button('start').onClick(() => {
  56. this.controller.start() // 开始播放
  57. }).margin(5)
  58. Button('pause').onClick(() => {
  59. this.controller.pause() // 暂停播放
  60. }).margin(5)
  61. Button('stop').onClick(() => {
  62. this.controller.stop() // 结束播放
  63. }).margin(5)
  64. Button('setTime').onClick(() => {
  65. this.controller.setCurrentTime(10, SeekMode.Accurate) // 精准跳转到视频的10s位置
  66. }).margin(5)
  67. }
  68. Row() {
  69. Button('rate 0.75').onClick(() => {
  70. this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放
  71. }).margin(5)
  72. Button('rate 1').onClick(() => {
  73. this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放
  74. }).margin(5)
  75. Button('rate 2').onClick(() => {
  76. this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放
  77. }).margin(5)
  78. }
  79. }
  80. }}

如何设置组件不同状态下的样式(API 9)

问题现象

对应组件的不同状态(如无状态、按下、禁用、聚焦、点击),显示不同的样式。

解决措施

使用多态样式,在组件的StateStyles接口中,定义组件不同状态下的样式。

代码示例

  1. //xxx.ts
  2. @Entry
  3. @Component
  4. struct StyleExample {
  5. @State isEnable: boolean = true;
  6. @Styles pressedStyles() {
  7. .backgroundColor("#ED6F21")
  8. .borderRadius(10)
  9. .borderStyle(BorderStyle.Dashed)
  10. .borderWidth(2)
  11. .borderColor('#33000000')
  12. .width(120)
  13. .height(30)
  14. .opacity(1)
  15. }
  16. build() {
  17. Flex({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) {
  18. Text("pressed")
  19. .backgroundColor('#0A59F7')
  20. .borderRadius(20)
  21. .borderStyle(BorderStyle.Dotted)
  22. .borderWidth(2)
  23. .borderColor(Color.Red)
  24. .width(100)
  25. .height(25)
  26. .opacity(1)
  27. .fontSize(14)
  28. .fontColor(Color.White)
  29. .stateStyles({
  30. pressed: this.pressedStyles
  31. })
  32. .margin({
  33. bottom: 20
  34. })
  35. .textAlign(TextAlign.Center)
  36. }
  37. .width(350)
  38. .height(300)
  39. }
  40. }

Scroll内Flex加宽高与滑动冲突(API 9)

适用于Stage模型。

问题现象

当在Scroll组件中添加容器组件,并设置该容器组件的尺寸时,会破坏滚动布局。

解决措施

Scroll组件中的容器组件不设置尺寸,大小由内容撑开。

父组件中如何处理子组件内点击事件(API 9)

适用于Stage模型。

在父组件中初始化子组件时,将父组件中定义的方法,传递给子组件,在子组件中调用该方法,类似于变量传递。

代码示例

  1. class Model {
  2. value: string
  3. }
  4. @Entry
  5. @Component
  6. struct EntryComponent {
  7. test() {
  8. console.log('testTag test in my component');
  9. }
  10. build() {
  11. Column() {
  12. MyComponent({ title: { value: 'Hello World 2' }, count: 7, onClick: this.test }) //初始化时传递定义的方法
  13. }
  14. }
  15. }
  16. @Component
  17. struct MyComponent {
  18. @State title: Model = { value: 'Hello World' }
  19. @State count: number = 0
  20. onClick: any;
  21. private toggle: string = 'Hello World'
  22. private increaseBy: number = 1
  23. build() {
  24. Column() {
  25. Text(`${this.title.value}`).fontSize(30)
  26. Button(`Click to increase count=${this.count}`)
  27. .margin(20)
  28. .onClick(() => {
  29. // 修改内部状态变量count
  30. this.count += this.increaseBy
  31. this.onClick.call();
  32. })
  33. }
  34. }
  35. }

如何主动拉起软键盘(API 9)

解决措施

可以通过focusControl.requestFocus控制输入框获焦,组件获焦后会自动弹起软键盘

SideBarContainer如何设置controlButton属性(API 9)

解决措施

示例代码:

  1. @Entry
  2. @Component
  3. struct SideBarContainerExample {
  4. normalIcon : Resource = $r("app.media.icon")
  5. selectedIcon: Resource = $r("app.media.icon")
  6. @State arr: number[] = [1, 2, 3]
  7. @State current: number = 1
  8. build() {
  9. SideBarContainer(SideBarContainerType.Embed)
  10. {
  11. Column() {
  12. ForEach(this.arr, (item, index) => {
  13. Column({ space: 5 }) {
  14. Image(this.current === item ? this.selectedIcon : this.normalIcon).width(64).height(64)
  15. Text("Index0" + item)
  16. .fontSize(25)
  17. .fontColor(this.current === item ? '#0A59F7' : '#999')
  18. .fontFamily('source-sans-pro,cursive,sans-serif')
  19. }
  20. .onClick(() => {
  21. this.current = item
  22. })
  23. }, item => item)
  24. }.width('100%')
  25. .justifyContent(FlexAlign.SpaceEvenly)
  26. .backgroundColor('#19000000')
  27. Column() {
  28. Text('SideBarContainer content text1').fontSize(25)
  29. Text('SideBarContainer content text2').fontSize(25)
  30. }
  31. .margin({ top: 50, left: 20, right: 30 })
  32. }
  33. .sideBarWidth(150)
  34. .minSideBarWidth(50)
  35. .controlButton({left:32,
  36. top:32,
  37. width:32,
  38. height:32,
  39. icons:{shown: $r("app.media.icon"),
  40. hidden: $r("app.media.icon"),
  41. switching: $r("app.media.icon")}})
  42. .maxSideBarWidth(300)
  43. .onChange((value: boolean) => {
  44. console.info('status:' + value)
  45. })
  46. }
  47. }

如何实现主动控制组件刷新(API 10)

解决措施

Canvas组件最终的显示内容分两种,一种是组件通用属性的绘制内容,比如背景色,boarder等这类组件属性方法设置的渲染属性,这类属性是可以通过状态变量驱动更新的。 另一种是通过CanvasRenderingContext2D绘制接口由应用自行绘制的内容。该类命令时绘制接口不响应状态变量,该类接口内置表脏功能,只要调用就会在下一帧刷新绘制内容,不需要开发者显式刷新。

怎么解决列表组件List在不设置高度的情况下,会出现滑动不到底的问题(API 10)

原因分析

List没有设置高度时,如果子组件总高度大于List父组件的高度时,List会取List父组件高度。如果List有其他兄弟节点,可能会吧List部分顶出父组件显示区域外,看起来像是划不到底部。

解决措施

List组件设置layoutWeight(1)属性,将剩余空间全部分配给List组件。

如何实现瀑布流滑动时,数据的无限加载和显示(API 10)

解决措施

1.使用LazyForEach做瀑布流子节点。

2.参考WaterFlow高性能开发指导在FlowItem的onAppear中判断是否即将触底,提前在LazyForEach数据源尾部新增数据;或在onScrollIndex11+事件中根据当前index进行判断。

customDialog中调用router.push启动新页面,会把customDialog关闭,怎么实现在不关闭弹窗的前提下启动新页面(API 10)

解决措施

开发者在路由跳转时,需要获取到主窗口的uiContext,再调用路由跳转。

当前ArkUI-X的支持进展如何,有无明确路线图(API 10)

解决措施

1.进展:ArkUI-X当前已经开源,首版本已于2023-12-15正式发布,当前支持Android、iOS跨平台;另外,也在探索和试验桌面平台与Web平台的支持。

2.路线图

应用如何在自定义组件的构建流程里跟踪组件数据或者状态(API 10)

问题现象

UI的构建build方法内无法插入日志,导致应用无法感知UI绘制流程,不利于调试UI,定位UI问题。

解决措施

使用@Watch回调来监测状态变量的变化,如果执行回调函数,说明在下一次vysnc信号发送时,使用该状态变量的UI会刷新绘制。

示例代码如下:

  1. @Prop @Watch('onCountUpdated') count: number = 0;
  2. @State total: number = 0;
  3. // @Watch 回调
  4. onCountUpdated(propName: string): void {
  5. this.total += this.count;
  6. }
  7. ts

自定义component不支持继承语法,针对其他框架支持的自定义组件继承及封装能力,ArkUI的解决方案是什么(API 10)

解决措施

对于声明式的自定义组件场景,不会提供继承的能力,需要使用组合的方式进行扩展,并结合后续提供的Modifier机制进行对现有组件属性的继承、复用和传递。

组件支持的参数类型及参数单位类型区别是什么,使用场景是什么(API 10)

解决措施

屏幕像素单位px(pixel),表示屏幕上的实际像素,1px代表设备屏幕上的一个像素点。视窗逻辑像素单位lpx,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,标识页面设计基准宽度。以此为基准,根据实际设备宽度来缩放元素大小。距离使用vp(virtual pixel),字体大小使用fp(font pixel),虚拟像素单位vp(virtual pixel),vp具体计算公式为:vp= px/(DPI/160)。
以屏幕相对像素为单位, 是一台设备针对应用而言所具有的虚拟尺寸(区别于屏幕硬件本身的像素单位)。它提供了一种灵活的方式来适应不同屏幕密度的显示效果,使用虚拟像素,使元素在不同密度的设备上具有一致的视觉体量。字体像素单位fp(font pixel),字体像素(font pixel)大小默认情况下与vp相同,即默认情况下1fp=1vp。如果用户在设置中选择了更大的字体,字体的实际显示大小就会在vp的基础上乘以scale系数,即1fp=1vp*scale。Percentage - 需要指定以%像素单位,如’10%'。
Resource - 资源引用类型,引入系统资源或者应用资源中的尺寸。

了解到目前还有很多小伙伴不知道学习鸿蒙需要重点掌握哪些核心要领?


为了帮助大家更深入有效的学习到鸿蒙开发知识点,我特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源, 内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

如果你是一名Android、Java、前端等开发人员、或是刚开始学习鸿蒙开发。想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。鸿蒙星河版学习路线+学习文档+面试题←点击领取,下面是鸿蒙开发的学习路线图。

应用开发中级就业技术

 应用开发中高级就业技术

南北双向高工技能基础

 全网首发-工业级 南向设备开发就业技术

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF

获取完整版白皮书方式请点击:鸿蒙生态应用开发白皮书V2.0PDF (qq.com)

以下也为大家准备了针对鸿蒙成长路线打造的鸿蒙学习文档。《鸿蒙开发学习手册》(共计890页)鸿蒙开发资料等…希望对大家有所帮助:

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:鸿蒙星河版学习路线+学习文档+面试题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/934356
推荐阅读
相关标签
  

闽ICP备14008679号