精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OS開發:典型頁面場景【一次開發,多端部署】(設置應用頁面)

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-27 10:33 ? 次閱讀

設置應用頁面

本小節以“設置”應用頁面為例,介紹如何使用自適應布局能力和響應式布局能力適配不同尺寸窗口。

頁面設計

為充分利用屏幕尺寸優勢,應用常常有在小屏設備上單欄顯示,大屏設備上左右分兩欄顯示的設計,設置應用頁面設計如下。

觀察“設置”應用頁面設計,不同斷點下“設置主頁”、“WLAN頁面”和“更多WLAN設置頁面”幾乎完全一致,只是在sm斷點下采用單欄顯示,在md和lg斷點下采用雙欄顯示。

在前面的典型頁面場景中,已經介紹了如何分析及實現不同斷點下設計相似的單個頁面,本小節將展開介紹如何實現不同斷點下存在單欄和雙欄設計的場景。

為了方便讀者理解,本小節將圍繞以下三個問題進行介紹。

  1. [如何實現單/雙欄的顯示效果]
  2. [如何實現點擊跳轉或刷新]
  3. [如何實現多級跳轉]
  4. 開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

如何實現單/雙欄的顯示效果

開發者可以使用Row、Column、[RowSplit]等基礎的組件,實現分欄顯示的效果,但是需要較多的開發工作量。方舟開發框架在API 9重構了[Navigation組件],開發者可以通過配置Navigation組件的屬性,控制其按照單欄或雙欄的效果進行顯示。

Navigation組件由Navbar和Content兩部分區域組成,Navigation組件支持Stack、Split以及Auto三種模式。Stack及Split模式下Navigation組件的表現如下圖所示。

  • Stack模式
  • Split模式
  • Auto模式
    Auto模式是指Navigation組件可以根據應用窗口尺寸,自動選擇合適的模式:窗口寬度小于520vp時,采用Stack模式顯示;窗口寬度大于等于520vp時,采用Split模式顯示。當窗口尺寸發生改變時,Navigation組件也會自動在Stack模式和Split模式之間切換。

說明:

  • Navigation組件提供的title、navBarWidth、navBarPosition等屬性來調整其顯示效果。Navigation組件樣式的配置與其它組件類似,這里不做贅述。
  • 首次加載Navigation組件所在的頁面時,如果Navigation組件處于Split模式,Navigation組件會自動激活其第一個NavRouter孩子節點(后文會展開介紹NavRouter)來刷新Content區域的顯示。

設置主頁的核心代碼如下所示。Navigation組件默認處于Auto模式,其樣式會根據應用窗口尺寸在單欄和雙欄之間自動切換。

import { SettingList } from '@ohos/settingItems';

@Entry
@Component
struct Index { 
  build() {
    Navigation() {
      SettingList()
    }
    .title($r('app.string.settings'))
    .navBarWidth('40%')
    .width('100%')
    .height('100%')
    .backgroundColor($r("sys.color.ohos_id_color_sub_background"))
  }
}
//核心代碼 SettingList.ets
import { MainItem } from '../components/MainItem';
import { ItemGroup } from '../components/ItemGroup';
import { SearchBox } from '../components/SearchBox';
import { MoreConnectionsItem } from '../moreconnections/MoreConnectionsItem';
import { WlanSettingItem } from '../wlan/WlanSettingItem';
        
class  ItemObj {
  title?: Resource
  tag?: Resource
  icon?:Resource
}
let bluetoothTab:ItemObj={
  title: $r('app.string.bluetoothTab'),
  tag: $r('app.string.enabled'),
  icon: $r('app.media.blueTooth'),
}
let mobileData:ItemObj={
  title: $r('app.string.mobileData'),
  icon: $r('app.media.mobileData'),
}
let brightnessTab:ItemObj={
  title: $r('app.string.brightnessTab'),
  icon: $r('app.media.displayAndBrightness'),
}
let volumeControlTab:ItemObj={
  title: $r('app.string.volumeControlTab'),
  icon: $r('app.media.volume'),
}
let biometricsAndPassword:ItemObj={
  title: $r('app.string.biometricsAndPassword'),
  icon: $r('app.media.biometricsAndPassword'),
}
let applyTab:ItemObj={
  title: $r('app.string.applyTab'),
  icon: $r('app.media.application'),
}
let storageTab:ItemObj={
  title: $r('app.string.storageTab'),
  icon: $r('app.media.storage'),
}
let security:ItemObj={
  title: $r('app.string.security'),
  icon: $r('app.media.security'),
}
let privacy:ItemObj={
  title: $r('app.string.privacy'),
  icon: $r('app.media.privacy'),
}
let usersAccountsTab:ItemObj={
  title: $r('app.string.usersAccountsTab'),
  icon: $r('app.media.userAccounts'),
}
let systemTab:ItemObj={
  title: $r('app.string.systemTab'),
  icon: $r('app.media.system'),
}
let aboutTab:ItemObj={
  title: $r('app.string.aboutTab'),
  icon: $r('app.media.aboutDevice'),
}
        
@Component
export struct SettingList {
  @Builder
  CustomDivider() {
    Divider()
      .strokeWidth('1px')
      .color($r('sys.color.ohos_id_color_list_separator'))
      .margin({ left: 48, right: 8 })
  }

   build() {
     List({ space: 12 }) {
       ListItem() {
        SearchBox()
       }
       .padding({ top: 8, bottom: 8 })
       .width('100%')

      ListItem() {
        ItemGroup() {
          WlanSettingItem()

          this.CustomDivider()

          MainItem(bluetoothTab)

          this.CustomDivider()

          MainItem(mobileData)

          this.CustomDivider()
          MoreConnectionsItem()
        }
      }

      ListItem() {
        ItemGroup() {
          MainItem(brightnessTab)
        }
      }

      ListItem() {
        ItemGroup() {
          MainItem(volumeControlTab)
        }
      }

      ListItem() {
        ItemGroup() {
          MainItem(biometricsAndPassword)

          this.CustomDivider()

          MainItem(applyTab)

          this.CustomDivider()

          MainItem(storageTab)

          this.CustomDivider()

          MainItem(security)

          this.CustomDivider()

          MainItem(privacy)
        }
      }

      ListItem() {
        ItemGroup() {
          MainItem(usersAccountsTab)

          this.CustomDivider()

          MainItem(systemTab)

          this.CustomDivider()

          MainItem(aboutTab)
        }
      }

    }
    .padding({ left: 12, right: 12 })
    .width('100%')
    .height('100%')
    .backgroundColor($r('sys.color.ohos_id_color_sub_background'))
   }
}

如何實現點擊跳轉或刷新

Navigation組件通常搭配[NavRouter組件]以及[NavDestination組件]一起使用:

  • NavRouter組件用于控制Navigation組件Content區域的顯示和刷新邏輯。
  • NavDestination組件用于實際刷新Navigation組件Content區域的顯示。

刷新控制

NavRouter組件用于控制Navigation組件中Content區域的刷新邏輯,其必須包含兩個孩子節點。

節點類型節點功能
第一個孩子節點容器類組件直接控制NavRouter的顯示效果
第二個孩子節點NavDestination組件刷新Navigation組件Content區域的顯示

NavRouter組件默認提供了點擊響應處理,不需要開發者自定義點擊事件邏輯。另外,NavRouter組件還提供了onStateChange回調事件,用于通知開發者NavRouter的狀態:用戶點擊NavRouter,激活NavRouter并加載對應的NavDestination子組件時,回調onStateChange(true);NavRouter對應的NavDestination子組件不再顯示時,回調onStateChange(false)。

img

結合設置應用的具體場景來看,上圖1號小紅框是NavRouter的第一個孩子節點,2號紅框是NavRouter的第二個孩子節點,相應的核心代碼實現如下。

import { MainItem } from '../components/MainItem';
import { WlanMoreSettingItem } from '../components/WlanMoreSettingItem';
import { SubItemToggle } from '../components/SubItemToggle';
import { SubItemWifi } from '../components/SubItemWifi';
import { ItemDescription } from '../components/ItemDescription';
import { ItemGroup } from '../components/ItemGroup';

class  MainItemObj {
  title?: Resource
  tag?: string
  icon?:Resource
  label?: string
}
let mainItem:MainItemObj={
  title: $r('app.string.wifiTab'),
  tag: 'UX',
  icon: $r('app.media.wlan'),
  label: 'WLAN'
}
@Component
export struct WlanSettingItem {
  @LocalStorageLink('selectedLabel') selectedLabel: string  = ''

  build() {
    Column() {
      NavRouter() {
        MainItem(mainItem)

        NavDestination() {
          WlanSetting()
        }
        .title($r('app.string.wifiTab'))
        .backgroundColor($r('sys.color.ohos_id_color_sub_background'))
      }
    }
  }
}
@Component
struct WlanSetting {
  @Builder CustomDivider() {
    Divider()
      .strokeWidth('1px')
      .color($r('sys.color.ohos_id_color_list_separator'))
      .margin({left: 12, right: 8})
  }

  build() {
    Column() {
      Column() {
        ItemGroup() {
          SubItemToggle({title: $r('app.string.wifiTab'), isOn: true})
        }

        Row().height(16)

        ItemGroup() {
          WlanMoreSettingItem()
        }
      }
      .margin({bottom: 19.5})
      .flexShrink(0)

      Scroll() {
        Column() {
          ItemDescription({description: $r('app.string.wifiTipConnectedWLAN')})
            .padding({
              left: 12,
              right: 12,
              bottom: 9.5
            })

          ItemGroup() {
            SubItemWifi({
              title: 'UX',
              subTitle: $r('app.string.wifiSummaryConnected'),
              isConnected: true,
              icon: $r('app.media.ic_wifi_signal_4_dark')
            })
          }

          Column() {
            ItemDescription({description: $r('app.string.wifiTipValidWLAN')})
              .margin({
                left: 12,
                right: 12,
                top: 19.5,
                bottom: 9.5
              })

            ItemGroup() {
              SubItemWifi({
                title: 'Huwe-yee',
                subTitle: $r('app.string.wifiSummaryEncrypted'),
                isConnected: false,
                icon: $r('app.media.ic_wifi_lock_signal_4_dark')
              })

              this.CustomDivider()

              SubItemWifi({
                title: 'UX-5G',
                subTitle: $r('app.string.wifiSummaryOpen'),
                isConnected: false,
                icon: $r('app.media.ic_wifi_signal_4_dark')
              })

              this.CustomDivider()

              SubItemWifi({
                title: 'E1-AP',
                subTitle: $r('app.string.wifiSummarySaveOpen'),
                isConnected: false,
                icon: $r('app.media.ic_wifi_signal_4_dark')
              })
            }
          }
        }
      }
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.Off)
      .width('100%')
      .flexShrink(1)
    }
    .width('100%')
    .height('100%')
    .padding({left: 12, right: 12})
  }
}

顯示刷新

NavDestination組件用于實際刷新Navigation組件Content區域的顯示。激活后的NavRouter對應的NavDestination組件,會占滿整個Content區域并刷新其顯示。

開發者可以通過NavDestination組件提供的如下屬性,調整其最終顯示效果:

  • backgroundColor:設置NavDestination組件的背景色。
  • title:自定義NavDestination組件的標題。
  • hideTitleBar:隱藏NavDestination組件的標題欄。

特別的,Navigation組件會根據當前的狀態決定是否在NavDestination組件標題欄起始部分自動添加返回鍵圖標。當Navigation組件添加了返回鍵圖標時,還可以自動響應及處理系統三鍵導航中的返回鍵事件。

如何實現多級跳轉

可以在NavDesination組件中,繼續使用NavRouter組件,以實現多級跳轉。多級跳轉場景下,Navigation組件同樣會根據當前的狀態決定是否自動添加返回鍵圖標及響應系統三鍵導航中的返回鍵事件。

image.png

結合具體場景,紅框3是一個NavRouter組件,點擊后可以控制Navigation組件中的Content區域刷新為紅框4對應的NavDestination組件嗎,其核心代碼實現如下所示。

import { SubItemArrow } from '../components/SubItemArrow';//組件請參考相關示例
import { SubItemToggle } from '../components/SubItemToggle';
import { ItemGroup } from '../components/ItemGroup';
import { ItemDescription } from '../components/ItemDescription';

class SubItemArrowObj{
  title?: Resource
}
let subItemArrow:SubItemArrowObj={
  title: $r('app.string.moreWlanSettings')
}
@Component
export struct WlanMoreSettingItem {
  @LocalStorageLink('selectedLabel') selectedLabel: string = ''

  build() {
    NavRouter() {
      SubItemArrow(subItemArrow)

      NavDestination() {
        WlanMoreSetting()
      }
      .title($r('app.string.moreWlanSettings'))
      .backgroundColor($r('sys.color.ohos_id_color_sub_background'))
    }
  }
}

@Component
export struct WlanMoreSetting {
  build() {
    Scroll() {
      Column() {
        ItemGroup() {
          SubItemArrow({
            title: $r('app.string.wlanPlus'),
            tag: $r('app.string.enabled')
          })
        }
        ItemDescription({description: $r('app.string.wlanPlusTip')})
          .margin({
            top: 8,
            bottom: 24,
            left: 12,
            right: 12
          })

        ItemGroup() {
          SubItemArrow({ title: $r('app.string.wlanDirect') })
        }

        Blank().height(12)

        ItemGroup() {
          SubItemToggle({title: $r('app.string.wlanSecurityCheck')})
        }

        ItemDescription({description: $r('app.string.wlanSecurityCheckTip')})
          .margin({
            top: 8,
            bottom: 24,
            left: 12,
            right: 12
          })

        ItemGroup() {
          SubItemArrow({title: $r('app.string.savedWlan')})
          Divider()
            .strokeWidth('1px')
            .color($r('sys.color.ohos_id_color_list_separator'))
            .margin({left: 12, right: 8})
          SubItemArrow({title: $r('app.string.installCertificates')})
        }
      }
      .backgroundColor($r('sys.color.ohos_id_color_sub_background'))
      .padding({left: 12, right: 12})
    }
    .scrollBar(BarState.Off)
    .width('100%')
  }
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151450.png

總結

本示例的基礎導航結構上圖所示:

  • 激活SettingList中的WLANSettingItem,可以加載及顯示WlanSetting
  • 激活WlanSetting中的WlanMoreSettingItem,可以加載及顯示WlanMoreSetting

Navigation組件支持自動切換單欄和雙欄的顯示效果,同時可以根據當前狀態自動添加返回鍵及響應系統的返回鍵事件。借助Navigation組件,開發者不用關心單欄和雙欄場景的差異而更關注于應用本身,極大的減少開發工作量及提高開發效率。
審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2321

    瀏覽量

    42749
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    188

    瀏覽量

    4371
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發案例:【一次開發多端部署-音樂專輯】

    基于自適應和響應式布局,實現一次開發多端部署音樂專輯頁面
    的頭像 發表于 05-13 16:48 ?651次閱讀
    HarmonyOS<b class='flag-5'>開發</b>案例:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>-音樂專輯】

    鴻蒙OS開發:【一次開發多端部署】(天氣應用)案例

    本章通過個天氣應用,介紹多應用的整體開發過程,包括UX設計、工程管理及調試、頁面開發等。
    的頭像 發表于 05-15 15:42 ?997次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(天氣應用)案例

    鴻蒙OS開發:【一次開發多端部署】(多天氣)項目

    本示例展示個天氣應用界面,包括首頁、城市管理、添加城市、更新時間彈窗,體現一次開發多端部署的能力。
    的頭像 發表于 05-20 14:59 ?804次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(<b class='flag-5'>一</b>多天氣)項目

    鴻蒙OS開發:【一次開發多端部署】(音樂專輯頁面

    基于自適應和響應式布局,實現一次開發多端部署音樂專輯頁面
    的頭像 發表于 05-25 16:21 ?738次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(音樂專輯<b class='flag-5'>頁面</b>)

    鴻蒙OS開發:【一次開發多端部署】(視頻應用)

    者提供了“一次開發多端部署”的系統能力,讓開發者可以基于一次
    的頭像 發表于 05-25 16:29 ?4487次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(視頻應用)

    鴻蒙OS開發:【一次開發多端部署】(典型布局場景

    雖然不同應用的頁面千變萬化,但對其進行拆分和分析,頁面中的很多布局場景是相似的。本小節將介紹如何借助自適應布局、響應式布局以及常見的容器類組件,實現應用中的典型布局
    的頭像 發表于 05-25 16:39 ?2060次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(<b class='flag-5'>典型</b>布局<b class='flag-5'>場景</b>)

    鴻蒙OS開發典型頁面場景一次開發多端部署】實戰(應用市場首頁)

    本示例展示了應用市場首頁,頁面中包括Tab欄、運營橫幅、精品應用、精品游戲等。
    的頭像 發表于 05-24 15:21 ?874次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】實戰(應用市場首頁)

    鴻蒙OS開發典型頁面場景一次開發多端部署】實戰(音樂專輯頁2)

    本示例使用[一次開發多端部署]中介紹的自適應布局能力和響應式布局能力進行多設備(或多窗口尺寸)適配,保證應用在不同設備或不同窗口尺寸下可以正常顯示。
    的頭像 發表于 05-25 16:47 ?2042次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】實戰(音樂專輯頁2)

    鴻蒙OS開發典型頁面場景一次開發多端部署】實戰(設置典型頁面

    本示例展示了設置應用的典型頁面,其在小窗口和大窗口有不同的顯示效果,體現一次開發多端
    的頭像 發表于 05-27 09:36 ?1101次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】實戰(<b class='flag-5'>設置</b><b class='flag-5'>典型</b><b class='flag-5'>頁面</b>)

    鴻蒙OS開發典型頁面場景一次開發多端部署】(資源使用)

    頁面開發過程中,經常需要用到顏色、字體、間距、圖片等資源,在不同的設備或配置中,這些資源的值可能不同。
    的頭像 發表于 05-28 09:44 ?921次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(資源使用)

    鴻蒙OS開發典型頁面場景一次開發多端部署】(短信)案例介紹

    本章從系統預置的應用中,選擇短信應用作為典型的案例,從頁面開發和工程結構的角度,介紹"多"的具體實踐。系統的產品形態在不斷豐富中,當前主要有默認設備和平板兩種產品形態,本章的具體實踐
    的頭像 發表于 05-28 15:08 ?1204次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(短信)案例介紹

    鴻蒙OS開發:【一次開發多端部署】(多設備自適應能力)簡單介紹

    本示例是《一次開發多端部署》的配套示例代碼,展示了[頁面開發
    的頭像 發表于 05-21 14:59 ?2312次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(多設備自適應能力)簡單介紹

    鴻蒙OS開發:【一次開發多端部署】( 設置app頁面

    本示例展示了設置應用的典型頁面,其在小窗口和大窗口有不同的顯示效果,體現一次開發多端
    的頭像 發表于 05-21 14:56 ?968次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】( <b class='flag-5'>設置</b>app<b class='flag-5'>頁面</b>)

    鴻蒙OS開發典型頁面場景一次開發多端部署】(交互歸

    對于不同類型的智能設備,用戶可能有不同的交互方式,如通過觸摸屏、鼠標、觸控板等。如果針對不同的交互方式單獨做適配,會增加開發工作量同時產生大量重復代碼。為解決這問題,我們統了各種交互方式的API,即實現了**交互歸
    的頭像 發表于 05-27 14:16 ?410次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(交互歸<b class='flag-5'>一</b>)

    鴻蒙OS開發典型頁面場景一次開發多端部署】(功能開發

    應用開發至少包含兩部分工作: UI頁面開發和底層功能開發(部分需要聯網的應用還會涉及服務端開發)。前面章節介紹了如何解決
    的頭像 發表于 05-28 17:32 ?535次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</b>:<b class='flag-5'>典型</b><b class='flag-5'>頁面</b><b class='flag-5'>場景</b>【<b class='flag-5'>一次</b><b class='flag-5'>開發</b>,<b class='flag-5'>多端</b><b class='flag-5'>部署</b>】(功能<b class='flag-5'>開發</b>)