自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何開發(fā)一個OpenHarmony購物APP導(dǎo)航頁面

系統(tǒng) OpenHarmony
一款購物App界面通常包括了掃一掃功能、搜索框、輪播圖、標簽頁、商品列表等功能,我們以橘子購物為例,介紹一下如何使用ArkTS開發(fā)一個購物類App。

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

購物類App是現(xiàn)在最常用的一類App,也是我們在應(yīng)用開發(fā)中經(jīng)常遇到的場景。一款購物App界面通常包括了掃一掃功能、搜索框、輪播圖、標簽頁、商品列表等功能,我們以橘子購物為例,介紹一下如何使用ArkTS開發(fā)一個購物類App。首先我們可以看一下最終實現(xiàn)效果:

如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)

如上圖所示,首先最外層是一個可以切換切換的標簽頁,分別對應(yīng)首頁、新品、購物車以及我的等四個欄目。頁面整體結(jié)構(gòu)可以通過Tabs組件實現(xiàn),通過閱讀Tabs組件的API文檔,注意到Tabs包含子組件TabContent即可實現(xiàn)選項卡效果。我們可以快速構(gòu)造出如下所示的整體結(jié)構(gòu):

private controller: TabsController = new TabsController()

  Column() {
    Tabs({
      barPosition: BarPosition.END,
      controller: this.controller
    }) {
      TabContent() {
      }

      TabContent() {
      }

      TabContent() {
      }

      TabContent() {
      }
    }
  }.width('100%')

其中barPosition控制選擇欄位置,BarPosition.END表示選擇欄在頁面下方,BarPosition.START表示選擇欄在頁面上方,同時定義一個TabsController來控制Tabs切換邏輯。圖中選擇欄各個欄目都有相同的結(jié)構(gòu),都是圖片加標題,這部分樣式在TabContent的tabBar屬性中設(shè)計,我們?nèi)缦率纠a使用@Builder裝飾方法來定義組件的聲明式UI描述。

@Builder TabBarBuilder(index: number) {
      Column() {
      Image(this.getTabBarImage(index))
      Text(TAB_TITLE_DATA[index].title)
      }
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%')
      .onClick(() => {
      this.controller.changeIndex(index)
      })
  }
  ...
  TabContent() {
        MainPage({ url: this.url })
      }.tabBar(this.TabBarBuilder(0))
  TabContent() {
        NewProduct({ url: this.url })
      }.tabBar(this.TabBarBuilder(1))
  TabContent() {
        ShopCart({ url: this.url })
      }.tabBar(this.TabBarBuilder(2))
  TabContent() {
        User()
      }.tabBar(this.TabBarBuilder(3))

其中MainPage,NewProduct,ShopCart,User表示各個頁面的具體內(nèi)容。常見的App通常是通過點擊切換的,而不能通過滑動切換,如果想要禁用Tab的滑動切換可以使用將Tab的scrollable屬性設(shè)計為false來實現(xiàn)。Tabs實現(xiàn)四個欄目切換達到上圖效果的整體代碼可以參考NavigationHomePage。

實現(xiàn)完最外層容器的標簽頁切換介紹后,我們再對主頁進行簡單介紹。首先對主頁內(nèi)容從上到下可以進行一個簡單分解:

如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)

一號框中包含兩張圖片,使用兩個image組件,其中二維碼圖片可以在onClick事件加入跳轉(zhuǎn)邏輯跳轉(zhuǎn)到二維碼模塊。

二號框為一個搜索框,使用TextInput組件。(示例代碼中無具體功能,通過Image+Text進行展示)。

這兩部分代碼可以參考TitleBar。

根據(jù)我們以往使用購物App的經(jīng)驗,我們可以知道下滑過程中,最上方圖片以及搜索框是一直存在的,即一二號框固定不動,三四五號框可以上下滑動,要實現(xiàn)這種效果只需要將后面三個框放到 Scroll組件中即可。

三號框可以使用Tab組件,參考代碼見MainPage,示例代碼中未實現(xiàn)具體功能,使用了Text進行展示。

四號框輪播圖中使用Swiper實現(xiàn)輪播圖效果,實現(xiàn)代碼可以參考Swiper。

五號框是主頁下半部分商品展示,這一部分看作一個Tabs,4個標簽分別對應(yīng)全部、精選、新品、實惠,每個Tab中包含了一個商品列表,列表中整齊地排列著各個商品元素,這類像柵格一樣的場景我們可以通過GridRow嵌套GridCol實現(xiàn),具體代碼見HomePageContent。

綜上所述,可以簡單地畫出導(dǎo)航頁對應(yīng)的結(jié)構(gòu)圖:

如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)如何開發(fā)一個OpenHarmony購物app導(dǎo)航頁面-開源基礎(chǔ)軟件社區(qū)

效果對比

我們將橘子購物實現(xiàn)效果與市面是常用的兩款購物APP京東與閑魚界面放在一起進行一個簡單對比,我們可以發(fā)現(xiàn)作為一個示例,在美觀方面與真實APP還是存在不小的差距,但是整體結(jié)構(gòu)上基本相同,能夠?qū)崿F(xiàn)一個購物類應(yīng)用的界面。
對于想要快速實現(xiàn)整體框架效果的讀者,還可以使用如下代碼通過Navigation+Tabs方式來快速實現(xiàn)。

完整實現(xiàn)代碼

@Entry
    @Component
    struct NavigationExample {
      @State currentIndex: number = 0
      @State Build: Array<Object> = [
        {
          text: 'home',
          num: 0
        },
        {
          text: 'app',
          num: 1
        },
        {
          text: 'cart',
          num: 2
        },
        {
          text: 'user',
          num: 3
        }
      ]

      @Builder NavigationTitle() {
        Column() {
          Text('Title')
            .height('100%')
        }.alignItems(HorizontalAlign.Start)
      }

      @Builder NavigationToolbar() {
        Row() {
          ForEach(this.Build, item => {
            Column() {
              Text(item.text)
                .fontColor(this.currentIndex == item.num ? '#007DFF' : '#182431')
                .fontSize(10)
                .lineHeight(14)
                .fontWeight(500)
                .margin({ top: 3 })
            }.width(104).height(56)
            .onClick(() => {
              this.currentIndex = item.num
            })
          })
        }.margin({ left: 24 })
      }

      build() {
        Column() {
          Navigation() {
            TextInput({ placeholder: 'search...' })
              .width('90%')
              .height(40)
              .backgroundColor('#FFFFFF')
              .margin({ top: 8 })
            Tabs({
              index:this.currentIndex
            }){
              TabContent(){
                Text('0')
              }
              TabContent(){
                Text('1')
              }
              TabContent(){
                Text('2')
              }
              TabContent(){
                Text('3')
              }
            }
          }
          .title(this.NavigationTitle)
          .toolBar(this.NavigationToolbar)
        }.width('100%').height('100%').backgroundColor('#F1F3F5')
      }
    }

實現(xiàn)效果

<img title=“” src=“OrangeShopping/04-navigationpage/demo.jpeg” alt=“image” width=“326” data-align=“center”>

讀者可以在這個基礎(chǔ)上添加所需要的組件,也可以完成一個購物類App界面。

本文供稿:https://gitee.com/pan-jiufeng。

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2018-01-08 14:31:09

Electron桌面APP前端

2022-06-16 15:07:06

布局結(jié)構(gòu)app

2021-02-07 13:22:53

微信服務(wù)導(dǎo)航頁移動應(yīng)用

2014-07-02 10:03:42

App推廣渠道

2020-10-13 10:49:23

APPAndiroid終端

2018-10-11 21:00:18

2023-04-11 09:12:31

北向應(yīng)用開發(fā)鴻蒙

2018-06-19 16:04:27

Dubbo應(yīng)用Java

2021-01-28 06:11:40

導(dǎo)航組件Sidenav Javascript

2022-10-08 16:26:23

APP應(yīng)用開發(fā)

2017-03-29 15:50:09

AndroidApp框架

2015-03-10 11:21:44

JavaScript組JavaScript

2023-03-17 18:33:12

ChatGPTLLM應(yīng)用

2014-03-12 10:00:26

移動開發(fā)跨平臺

2015-11-06 10:14:36

APP虛擬服務(wù)器

2022-02-22 20:35:22

公鑰私鑰數(shù)據(jù)

2022-08-08 19:46:26

ArkUI鴻蒙

2023-06-06 15:38:28

HTMLCSS開發(fā)

2020-03-07 22:06:22

人工智能心理健康軟件

2021-07-28 14:59:08

鴻蒙HarmonyOS應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號