【鸿蒙实战开发】一多开发实例(股票类)

往期推文全新看点

概述

本文从目前流行的垂类市场中,选择股票类应用作为典型案例,详细介绍 “一多 在实际开发中的应用。主要包含首页、资讯、自选股、个股详情、行情等9个典型页面。

  • 核心功能:

分栏布局:分栏布局通过 Navigation 实现,在断点为lg时设置mode属性为NavigationMode.Stack,实现单栏效果,在其他断点下设置mode属性为NavigationMode.Split,实现分栏效果。

宫格卡片 的多股同列:用网格布局 Grid组件 ,在不同断点下将父组件分为不同列数,来实现自适应布局的占比能力。

  • 关键场景:

首页-股票页签:借助 栅格布局 监听断点变化,同时设置layoutWeight属性为1,实现居中对齐自适应拉伸。

股票PK详情-核心指标:使用 Blank组件 及设置固定宽度可实现数据各列的空白空间自适应拉伸,同时对不同列设置不同的alignItems,支持不同列设置不同对齐方式。

行情-股票双页签:借助 栅格布局 监听断点变化,改变 List组件 下子组件的间隔宽度,同时给List组件设置固定宽度,当List组件下的tab内容超过设定宽度时隐藏部分tab,延伸显示更多。

下面的章节将分别从、 架构设计 、 页面开发 三个角度给出推荐的参考样例,介绍“一多”股票类应用在开发过程中的最佳实践。

架构设计

HarmonyOS的分层架构主要包括三个层次:产品定制层、基础特性层和公共能力层,为开发者构建了一个清晰、高效、可扩展的设计架构。

页面开发

本章介绍股票类应用中如何使用”一多”的布局能力,完成页面层级的一套页面、多端适配。下文将从不同页面展开,介绍每个页面区域使用到具体的布局能力,帮助开发者从零到一进行股票类应用的开发。

首页

  • 将首页划分为7个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1底部/侧边页签借助 栅格布局 监听断点变化改变位置,设置在不同断点下Tabs组件的vertical属性,实现显示在页面的不同位置。
2标题List组件 实现延伸能力,layoutWeight实现拉伸能力。
3快捷入口List组件 实现延伸能力
4Banner使用 Swiper组件,设置在不同断点下的displayCount属性来实现自适应布局的延伸能力。
5中间tab借助 栅格布局 监听断点变化,同时设置layoutWeight属性为1,实现居中对齐自适应拉伸,示例代码为:股票页签。
6指数使用 Swiper组件 自适应增加个数,代码可参考 一多开发实例(长视频)。
7热门通过 Swiper组件的displayCount属性并结合断点,控制在不同断点下显示不同的列数
  • 股票页签

借助栅格布局 监听断点变化,不同断点 List组件] 子组件的间隔设置为不同值,同时设置layoutWeight属性为1,实现居中对齐自适应拉伸。

import { ListDataConstants } from '../constants/ListDataConstants';
import { CommonConstants } from '../../constants/CommonConstants';
import { BreakpointType } from '../../utils/BreakpointType';

@Entry
@Component
export struct AdaptiveTabCenteringIndex {
  @StorageLink('breakPoint') breakPoint: string = CommonConstants.BREAK_POINT_SM;
  @Consume('pageInfos') pageInfos: NavPathStack;
  @State tabIndexSelected: number = 0;

  build() {
    NavDestination() {
      Column() {
        ...
        Column() {
          Row() {
            Column() {
              List({
                // 借助栅格布局监听断点变化,不同断点List子组件的间隔设置为不同值
                space: new BreakpointType(CommonConstants.TAB_PADDING_SM, CommonConstants.TAB_PADDING_MD,
                  CommonConstants.TAB_PADDING_LG).getValue(this.breakPoint)
              }) {
                ForEach(ListDataConstants.RECOMMENDATION_TAB_LIST, (item: string, index: number) => {
                  ListItem() {
                    Column() {
                      Text(item)
                        ...
                    }
                  }
                  ...
                }, (item: number, index: number) => index + JSON.stringify(item))
              }
              .scrollBar(BarState.Off)
              .listDirection(Axis.Horizontal)
            }
            ...
            .layoutWeight(CommonConstants.COMMON_FAL_1)
          }
          ...
        }
        ...
      }
    }
  }
  .hideTitleBar(true)
}

资讯

  • 将资讯页划分为4个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1底部/侧边页签借助 栅格布局 监听断点变化改变位置,设置在不同断点下Tabs组件的vertical属性,实现显示在页面的不同位置
2标题文字和功能按钮中间增加 Blank组件,实现拉伸能力。
3中间Tab借助 栅格布局 监听断点变化,不同断点占比不同,同时设置layoutWeight属性为1,实现居中对齐自适应拉伸,代码可参考:股票页签。
4卡片使用 WaterFlow组件 设置columnsTemplate属性实现单列变多列
  • 整个页面使用的是 分栏布局 ,点击某一个资讯卡片时,可分栏显示新闻资讯详情。

自选股

  • 将自选股页划分为4个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1底部/侧边页签借助 栅格布局 监听断点变化改变位置,设置在不同断点下Tabs组件的vertical属性,实现显示在页面的不同位置
2标题文字和功能按钮中间增加 Blank组件,实现拉伸能力。
3指数最后一个组件固定,其他组件使用 List组件 实现延伸能力,随着设备宽度变大,页签间距变大、页面能够展示更多页签内容
4股票列表使用 Blank组件 及设置固定宽度可实现数据各列的空白空间自适应拉伸,同时对不同列设置不同的alignItems,支持不同列设置不同对齐方式,示例代码同核心指标。
  • 整个页面使用的是 分栏布局,点击某一股票时,可分栏显示新闻资讯详情,该功能在一多银行理财中有详细介绍。

个股详情

  • 将个股详情页划分为6个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1交易操作行使用 List组件 实现延伸能力,同时使用layoutWeight将增加的空间全部分配给”去交易”按钮,实现拉伸能力。
2标题居中显示,其他操作两端对齐,空白空间使用 Blank组件 实现自适应布局拉伸能力。
3行情列表数据行情居左放大显示,通过 Swiper组件 的displayCount属性并结合断点,控制在不同断点下显示不同的列数,列表自适应两列变多列。
4中间Tab通过 List组件 实现自适应延伸。
5曲线图使用layoutWeight属性实现拉伸能力。
6讨论的Tab通过 List组件 实现自适应延伸。
  • 该页面同上个页面布局相似,整体结构为分栏布局。

添加股票

  • 将添加股票页划分为4个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1标题空白空间使用 Blank组件 实现自适应布局拉伸能力。
2列表第一列和后面两列两端对齐,中间增加 Blank组件,实现自适应拉伸。
3猜你想找通过 List组件 实现自适应延伸
4PK按钮使用layoutWeight属性将剩余空间分配给开始PK按钮实现拉伸能力。

股票PK详情

  • 将股票PK详情页划分为6个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1标题空白空间使用 Blank组件 实现自适应拉伸。
2卡片固定宽度,居左显示。
3中间Tab使用 Blank组件实现自适应布局拉伸能力。
4曲线图使用layoutWeight属性实现拉伸能力。
5时间维度设置 Flex布局 的justifyContent属性为FlexAlign.SpaceBetween,实现自适应拉伸。
6指标名称和核心指标使用 Blank组件 及设置固定宽度可实现数据各列的空白空间自适应拉伸,同时对不同列设置不同的alignItems,支持不同列设置不同对齐方式,示例代码如:核心指标。
  • 核心指标

使用 Blank组件 作为数据各列的空白空间,同时给各列数据及表格整体设置固定宽度,可实现数据各列的空白空间自适应拉伸。

对不同列设置不同的alignItems,支持不同列设置不同对齐方式。

...
Row() {
  Column() {
    ForEach(ListDataConstants.INDICATOR_NAME_COLUMN, (item: string, index: number) => {
      ...
    }, (item: string, index: number) => index + JSON.stringify(item))
  }
  .alignItems(HorizontalAlign.Start)

  Blank()

  Column() {
    ForEach(ListDataConstants.STOCK_INDEX_DATA1, (item: string, index: number) => {
      ...
    }, (item: string, index: number) => index + JSON.stringify(item))
  }
  .width(CommonConstants.STOCK_DATA_WIDTH)
  .alignItems(HorizontalAlign.End)

  Blank()

  Column() {
    ForEach(ListDataConstants.STOCK_INDEX_DATA2, (item: string, index: number) => {
      ...
    }, (item: string, index: number) => index + JSON.stringify(item))
  }
  .width(CommonConstants.STOCK_DATA_WIDTH)
  .alignItems(HorizontalAlign.End)

  Blank()

  Column() {
    ForEach(ListDataConstants.STOCK_INDEX_DATA3, (item: string, index: number) => {
      ...
    }, (item: string, index: number) => index + JSON.stringify(item))
  }
  .width(CommonConstants.STOCK_DATA_WIDTH)
  .alignItems(HorizontalAlign.End)
}
.width(CommonConstants.FULL_WIDTH_PERCENT)
...

行情

  • 将行情页划分为6个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1底部/侧边页签借助 栅格布局 监听断点变化改变位置,设置在不同断点下Tabs组件的vertical属性,实现显示在页面的不同位置。
2标题使用 Blank组件 实现空白空间自适应拉伸。
3双Tab借助 栅格布局 监听断点变化,改变 List组件 下子组件的间隔宽度,同时给List组件设置固定宽度,当List组件下的tab内容超过设定宽度时隐藏部分tab,延伸显示更多,示例代码如:股票双页签。
4卡片使用 Swiper组件 ,设置在不同断点下的displayCount属性来实现自适应布局的延伸能力(同首页Banner图)。
5快捷入口使用 List组件 实现自适应布局的延伸能力,随容器组件尺寸变大,可以看到的卡片入口相应增加。
6大盘分析和热门板块使用挪移布局来实现“上下布局”与“左右布局”间的切换
  • 股票双页签

借助 栅格布局 监听断点变化,改变 List组件 下子组件的间隔宽度,同时给List组件设置固定宽度,当List组件下的tab内容超过设定宽度时隐藏部分tab,延伸显示更多。

...
Row() {
  Column() {
    List({
      space: new BreakpointType(CommonConstants.DOUBLE_TAB_PADDING_SM, CommonConstants.DOUBLE_TAB_PADDING_MD1,
        CommonConstants.DOUBLE_TAB_PADDING_LG1).getValue(this.breakPoint)
    }) {
      ForEach(ListDataConstants.STOCK_OPTIONS_LIST1, (item: string, index: number) => {
        ListItem() {
          Column() {
            Text(item)
              ...
          }
        }
        ...
      }, (item: number, index: number) => index + JSON.stringify(item))

      ListItem() {
        Image($r('app.media.ic_public_more'))
          ...
      }
      ...
    }
    .scrollBar(BarState.Off)
    .listDirection(Axis.Horizontal)
  }
  .width(CommonConstants.WIDTH_296)
  ...
}
...

行情-选股

  • 将行情-选股页划分为5个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1底部/侧边页签借助 栅格布局 监听断点变化改变位置,设置在不同断点下Tabs组件的vertical属性,实现显示在页面的不同位置。
2标题使用 Blank组件 实现空白空间自适应拉伸。
3快捷入口使用 List组件 实现自适应布局的延伸能力,随容器组件尺寸变大,可以看到的卡片入口相应增加。
4今日主力和特色榜单使用挪移布局来实现“上下布局”与“左右布局”间的切换
5价值关注通过 List组件 实现单列变多列使用 WaterFlow组件 设置columnsTemplate属性实现单列变多列

多股同列

  • 将多股同列页划分为3个部分,效果图如下:
示意图smmdlg
效果图
  • 对其中的各个区域分析使用的一多能力,实现方案如下表:
区域编号简介实现方案
1标题居中显示,其他操作两端对齐,空白空间使用 Blank组件 实现自适应拉伸。
2中间Tab借助 栅格布局 监听断点变化,使用 List组件 改变tab间距,展示更多tab内容,实现延伸能力。
3卡片用网格布局 Grid组件 ,在不同断点下调整columnsTemplate属性将父组件分为不同列数,来实现自适应布局的占比能力。
  • 整个页面使用卡片的 宫格卡片 ,实现多股同列的功能,可以使用多个卡片的宫格布局同时显示更多股票信息,利用宽屏优势露出更多列数内容。

最后

总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙全栈开发学习路线与学习文档给大家用来跟着学习。

针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植……等)技术知识点。

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

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

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):

在这里插入图片描述

《OpenHarmony源码解析》:

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值