鴻蒙開發(fā)核心信息匯總

一、聲明式UI框架指南

  1. 組件創(chuàng)建與配置

    • 無參數(shù)組件:Column() { ... }
    • 有參數(shù)組件:Image('https://xyz/test.jpg')
    • 屬性配置:Text('test').fontSize(12).fontColor(Color.Red)
    • 事件處理:Button('Click me').onClick(() => { this.count++ })
  2. 布局容器核心用法

    • Column:垂直布局容器,主軸為垂直方向

      Column({ space: 10 }) {
        Text('item 1').fontSize(20)
        Text('item 2').fontSize(20)
      }.alignItems(HorizontalAlign.Center)
      
    • Row:水平布局容器,主軸為水平方向

      Row({ space: 15 }) {
        Text('item A').backgroundColor('#00f')
        Text('item B').backgroundColor('#f00')
      }.justifyContent(FlexAlign.SpaceBetween)
      
    • Stack:層疊布局容器

      Stack() {
        Image('bg.jpg').size({ width: 300, height: 200 })
        Text('Overlay Text').position({ x: 20, y: 20 })
      }
      

二、狀態(tài)管理最佳實(shí)踐

  1. @State裝飾器核心特性

    • 組件內(nèi)部狀態(tài)管理,值變化觸發(fā)UI自動(dòng)刷新
    • 支持類型:string/number/boolean/object/數(shù)組等
    • 必須本地初始化:@State count: number = 0
  2. 響應(yīng)式更新機(jī)制

    • 簡單類型直接賦值:this.count = 1
    • 對象類型需整體賦值:this.user = { ...this.user, name: 'new' }
    • 數(shù)組操作:this.list.push(newItem)this.list[0] = newValue
  3. 典型應(yīng)用示例

    @Component
    struct CounterComponent {
      @State count: number = 0
      
      build() {
        Column() {
          Text(`當(dāng)前計(jì)數(shù): ${this.count}`).fontSize(24)
          Button('增加計(jì)數(shù)').onClick(() => {
            this.count++ // 自動(dòng)觸發(fā)UI刷新
          })
        }
      }
    }
    

三、分布式API與跨設(shè)備協(xié)同

  1. 媒體會(huì)話(AVSession)基礎(chǔ)

    // 創(chuàng)建媒體會(huì)話
    const session = await avSession.createAVSession(context, 'video_session', 'video')
    await session.setAVMetadata({
      title: '示例視頻',
      duration: 3600
    })
    await session.activate()
    
  2. 投播組件(AVCastPicker)集成

    import { avCast } from '@kit.AVSessionKit'
    
    // 喚起設(shè)備選擇面板
    const picker = new avCast.AVCastPicker()
    picker.show(session.sessionId)
    
    // 監(jiān)聽投播狀態(tài)變化
    session.on('castStateChange', (state) => {
      console.log('投播狀態(tài):', state) // CONNECTING/CONNECTED/DISCONNECTED
    })
    
  3. 投播控制器(AVCastController)用法

    // 獲取控制器
    const castController = await session.createCastController()
    
    // 基本控制
    castController.sendControlCommand({ command: 'play' })
    castController.sendControlCommand({ command: 'pause' })
    castController.setPlaybackPosition(120) // 跳轉(zhuǎn)到120秒
    

四、跨設(shè)備投屏完整案例

  1. 手機(jī)-智慧屏投屏實(shí)現(xiàn)步驟

    • 步驟1:創(chuàng)建并激活媒體會(huì)話
    • 步驟2:初始化投播組件并監(jiān)聽狀態(tài)
    • 步驟3:通過投播控制器發(fā)送控制指令
    • 步驟4:處理遠(yuǎn)端設(shè)備狀態(tài)回調(diào)
  2. 核心代碼示例

    // 1. 創(chuàng)建媒體會(huì)話
    async createMediaSession(context: Context) {
      const session = await avSession.createAVSession(context, '投屏演示', 'video')
      session.setExtras({ requireAbilityList: ['url-cast'] })
      await session.activate()
      return session
    }
    
    // 2. 初始化投播功能
    initCast(session: avSession.AVSession) {
      // 顯示設(shè)備選擇面板
      const picker = new avCast.AVCastPicker()
      picker.show(session.sessionId)
      
      // 監(jiān)聽連接狀態(tài)
      session.on('castStateChange', async (state) => {
        if (state === 'CONNECTED') {
          const controller = await session.createCastController()
          this.startRemoteControl(controller)
        }
      })
    }
    
    // 3. 遠(yuǎn)程控制實(shí)現(xiàn)
    startRemoteControl(controller: avCast.AVCastController) {
      // 播放控制
      this.remoteController = controller
    }
    

五、布局實(shí)戰(zhàn)技巧

  1. 主軸與交叉軸控制

    • Column組件:主軸垂直,交叉軸水平

      Column() {
        Text('上').width('100%')
        Text('中').width('100%')
        Text('下').width('100%')
      }.justifyContent(FlexAlign.SpaceBetween) // 主軸對齊
       .alignItems(HorizontalAlign.Center) // 交叉軸對齊
      
    • Row組件:主軸水平,交叉軸垂直

      Row() {
        Text('左')
        Text('中')
        Text('右')
      }.justifyContent(FlexAlign.SpaceAround)
       .alignItems(VerticalAlign.Center)
      
  2. 復(fù)雜布局嵌套示例

    Column() {
      // 標(biāo)題區(qū)域
      Row() {
        Image('logo.png').width(40).height(40)
        Text('應(yīng)用標(biāo)題').fontSize(20).margin({ left: 10 })
      }.width('100%').padding(15)
      
      // 內(nèi)容區(qū)域
      Stack() {
        Image('bg.jpg').size({ width: '100%', height: 200 })
        Column() {
          Text('疊加文本').fontColor(Color.White)
          Button('操作按鈕').margin({ top: 10 })
        }.alignItems(HorizontalAlign.Center)
      }
      
      // 列表區(qū)域
      List() {
        ForEach(this.items, (item) => {
          ListItem() {
            Text(item.name).padding(10)
          }
        })
      }.height(300)
    }
    

鴻蒙開發(fā)學(xué)習(xí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • """1.個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消息應(yīng)非常簡單,如“Hello ...
    她即我命閱讀 5,428評論 0 6
  • 為了讓我有一個(gè)更快速、更精彩、更輝煌的成長,我將開始這段刻骨銘心的自我蛻變之旅!從今天開始,我將每天堅(jiān)持閱...
    李薇帆閱讀 2,249評論 1 4
  • 似乎最近一直都在路上,每次出來走的時(shí)候感受都會(huì)很不一樣。 1、感恩一直遇到好心人,很幸運(yùn)。在路上總是...
    時(shí)間里的花Lily閱讀 1,753評論 1 3
  • 1、expected an indented block 冒號后面是要寫上一定的內(nèi)容的(新手容易遺忘這一點(diǎn)); 縮...
    庵下桃花仙閱讀 1,107評論 1 2
  • 一、工具箱(多種工具共用一個(gè)快捷鍵的可同時(shí)按【Shift】加此快捷鍵選取)矩形、橢圓選框工具 【M】移動(dòng)工具 【V...
    墨雅丫閱讀 1,633評論 0 0

友情鏈接更多精彩內(nèi)容