OpenHarmony开发实例:【新闻客户端】

这篇具有很好参考价值的文章主要介绍了OpenHarmony开发实例:【新闻客户端】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 介绍

本篇Codelab我们将教会大家如何构建一个简易的OpenHarmony新闻客户端(JS版本)。应用包含两级页面,分别是主页面和详情页面,两个页面都展示了丰富的UI组件,其中详情页的实现逻辑中还展示了如何通过调用相应接口,实现跨设备拉起FA。本教程将结合以下内容进行讲解:

1.顶部tabs以及新闻列表list的使用

2.每条新闻的文本框以及图像

3.布局及页面跳转

4.设备发现以及跨设备拉起FA

最终效果预览如下图所示:

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

搭建OpenHarmony环境

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以Hi3516DV300开发板为例,参照以下步骤进行:

  1. [获取OpenHarmony系统版本]:标准系统解决方案(二进制)。

  2. 搭建烧录环境:

    1. [完成DevEco Device Tool的安装]
    2. [完成Hi3516开发板的烧录]
    3. 鸿蒙开发指导文档:qr23.cn/AKFP8k点击或复制转到。
  3. 搭建开发环境:

    1. 开始前请参考[工具准备] ,完成DevEco Studio的安装和开发环境配置。
    2. 开发环境配置完成后,请参考[使用工程向导] 创建工程(模板选择“Empty Ability”),选择JS或者eTS语言开发。
    3. 工程创建完成后,选择使用[真机进行调测] 。

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

分布式组网

完成本篇Codelab我们还需要完成开发板的分布式组网,本示例以Hi3516DV300开发板为例,参照以下步骤进行:

  1. 硬件准备:准备两台烧录相同的版本系统的Hi3516DV300开发板A、B。

  2. 两个开发板A、B配置在同一个WiFi网络之下。

    打开设置-->WLAN-->点击右侧WiFi开关-->点击目标WiFi并输入密码。

    OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

  3. 将设备A、B设置为互相信任的设备。

    • 找到系统应用“音乐”。

    OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    • 设备A打开音乐,点击左下角带箭头的流转按钮,弹出列表框,在列表中会展示远端设备的id。

      OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    • 选择远端设备B的id,另一台开发板(设备B)会弹出验证的选项框。

      OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    • 设备B点击允许,设备B将会弹出随机PIN码,将设备B的PIN码输入到设备A的PIN码填入框中。

      OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

      OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    配网完毕。

代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在最后的参考中提供下载方式,接下来我们会用一小节来讲解整个工程的代码结构:

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

  • images:存放工程使用到的图片资源。
  • index:构成新闻列表页面,包括index.hml布局文件、index.css样式文件、index.js逻辑处理文件。
  • detail:构成新闻详情页面,包括detail.hml布局文件、detail.css样式文件、detail.js逻辑处理文件。
  • config.json:配置文件。

添加主页新闻类型

首先为我们的应用添加顶部新闻类型,用于切换不同类别的新闻。这里会使用到tabs、tab-bar控件,同时使用for循环对新闻的title进行遍历,新闻的标题有All、Health、Finance、Technology、Sport、Internet、Game七大类。图片示例和代码如下:

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

<div class="container">
    <tabs index="0" vertical="false" onchange="changeNewsType">
        <tab-bar class="tab-bar" mode="scrollable">
            <text class="tab-text" for="{{ title in titleList }}">{{ title.name }} </text>
        </tab-bar>
    </tabs>
</div>

添加主页顶部新闻类型

  1. 我们需要实现一个新闻item的布局,其样式包含左边的新闻标题、右边的新闻图片以及下方的新闻分割线,图片示例和代码如下:

    OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    <div style="flex-direction : column">
        <div style="flex-direction : row">
              <text class="text">
                  {{ news.title }}
              </text>
              <image class="image" src="{{ news.imgUrl }}">
                  </image>
              </div>
         <div style="height : 2px; width : 100%; background-color : #97d2d4d4;">
         </div>
     </div>
  2. 我们需要实现一个新闻列表,也就是将上方的新闻item进行一个循环的展示,这需要用到list、list-item的相关知识点。我们需要将newsList新闻列表数据进行循环,所以新闻item的布局外层需要嵌套一个list和list-item,图片示例和代码如下:

    OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

    <list class="list">
        <list-item for="{{ news in newsList }}" onclick="itemClick(news)">
               // 新闻item的布局代码填充到这里         
        </list-item>
    </list>
  3. 我们需要实现新闻类型的切换,每一条新闻都会有一个新闻类型,当选择All的时候默认展示所有类型的新闻,当选择具体的新闻类型时,如选择Health,则需要筛选出属于Health类型的新闻进行展示。添加一个自定义函数changeNewsType,代码如下所示:

    // 选择新闻类型
    changeNewsType: function (e) {
      const type = titles[e.index].name;
      this.newsList = [];
      if (type === 'All') {
        // 展示全部新闻
        this.newsList = newsData;
      } else {
        // 分类展示新闻
        const newsArray = [];
        for (var news of newsData) {
           if (news.type === type) {
              newsArray.push(news);
          }
        }
        this.newsList = newsArray;
      }
    }

详情页页面布局

详情页面包含新闻标题、阅读量和喜好数、新闻图片、新闻文字以及下方的状态栏。状态栏包括1个可输入文本框和4个功能按键,图片示例和代码如下:

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

<div class="container">
    <text class="text-title">{{ title }}</text>
    <text class="text-reads">reads: {{ reads }}   likes: {{ likes }}</text>
    <image class="image" src="{{ imgUrl }}"></image>
    <text class="text-content">
        {{ content }}
    </text>
    <!-- 详情页底部-->
    <div class="bottom">
        <textarea class="textarea" placeholder="Enter a comment."></textarea>
        <image class="image-bottom" src="/common/images/icon_message.png"></image>
        <image class="image-bottom" src="/common/images/icon_star.png"></image>
        <image class="image-bottom" src="/common/images/icon_good.png"></image>
        <image class="image-bottom" src="/common/images/icon_share.png" onclick="toShare"></image>
    </div>
</div>

需要注意的是detail.hml只是展示了页面的布局结构,其具体的布局样式需要参考detail.css文件。

跳转详情页

完成新闻列表页面和详情页的布局后,需要实现页面跳转的功能。新闻列表页面中绑定一个list-item的点击事件itemClick,其中传入的参数是news(新闻的详细数据)。

<list-item for="{{ news in newsList }}" onclick="itemClick(news)">

在JS中页面跳转需要在JS文件的头部引入如下一行代码:

import router from '@system.router';

实现list-item的点击事件itemClick,其代码如下所示:

itemClick(news) {
  // 跳转到详情页面
  router.push({
    uri: 'pages/detail/detail',
    params: {
      'title': news.title,
      'type': news.type,
      'imgUrl': news.imgUrl,
      'reads': news.reads,
      'likes': news.likes,
      'content': news.content
    }
  });
}

设备发现

首先给分享按钮添加一个分享事件toShare,代码如下所示:

<image class="image-bottom" src="/common/images/icon_share.png" onclick="toShare"></image>

然后调用getTrustedDeviceListSync(),获取所有可信设备的列表,代码如下所示:

import deviceManager from '@ohos.distributedHardware.deviceManager';

toShare() {
    // 创建设备管理实例
    deviceManager.createDeviceManager('com.huawei.codelab', (err, data) => {
      if (err) {
        return;
      }
      this.deviceMag = data;
      // 获取所有可信设备的列表
      this.deviceList = this.deviceMag.getTrustedDeviceListSync();
    });
    // 循环遍历设备列表,获取设备名称和设备Id
    for (let i = 0; i < this.deviceList.length; i++) {
      this.deviceList[i] = {
        deviceName: this.deviceList[i].deviceName,
        deviceId: this.deviceList[i].deviceId,
        checked: false
      };
    }
    this.$element('showDialog').show();
  }

最后自定义dialog弹窗显示所有可信设备,代码如下所示:

<dialog id="showDialog" class="select-device-dialog">
    <div class="select-device-wrapper">
        <text class="select-device-title">选择设备</text>
        <list class="select-device-list">
            <list-item class="select-device-item" for="{{ deviceList }}" id="list">
                <text class="select-device-item-left">{{ $item.deviceName }}
                </text>
                <input class="select-device-item-right" type="checkbox" name="Device" value="{{$idx}}"
                       @change="selectDevice({{$idx}})" checked="{{$item.checked}}">
                </input>
            </list-item>
        </list>
        <div class="choose-ok-or-not">
            <text class="select-device-btn" @click="chooseCancel">取消</text>
            <text class="select-device-btn" @click="chooseComform">确定</text>
         </div>
    </div>
</dialog>

最终实现的效果如下所示:

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

 说明:  本工程项目包含getTrustedDeviceListSync()获取所有可信设备的列表方法,请选择API 7或以上版本。

分布式拉起

弹出设备列表后,选择设备并点击“确定”按钮,将会分布式拉起另外一台设备,其具体实现代码如下所示:

chooseComform() {
    this.$element('showDialog').close();
    for (let i = 0; i < this.deviceList.length; i++) {
      // 判断设备是否被选中
      if (this.deviceList[i].checked) {
      const params = {
        url: 'pages/detail/detail',
        title: this.title,
        type: this.type,
        imgUrl: this.imgUrl,
        reads: this.reads,
        likes: this.likes,
        content: this.content,
      };

      const wantValue = {
        bundleName: 'com.huawei.newsdemooh',
        abilityName: 'com.huawei.newsdemooh.MainAbility',
        deviceId: this.deviceList[i].deviceId,
        parameters: params
      };

      featureAbility.startAbility({
        want: wantValue
      }).then((data) => {
        console.info('featureAbility.startAbility finished, ' + JSON.stringify(data));
      });
      console.info('featureAbility.startAbility want=' + JSON.stringify(wantValue));
      console.info('featureAbility.startAbility end');
      }
    }
}

最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

高清完整版请点击→《鸿蒙NEXT星河版开发学习文档》

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

《鸿蒙 (OpenHarmony)开发学习视频》

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

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

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

《鸿蒙 (OpenHarmony)开发基础到实战手册》

获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

OpenHarmony北向、南向开发环境搭建

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

《鸿蒙开发基础》

  1. ArkTS语言

  2. 安装DevEco Studio

  3. 运用你的第一个ArkTS应用

  4. ArkUI声明式UI开发

  5. .……

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

《鸿蒙开发进阶》

  1. Stage模型入门

  2. 网络管理

  3. 数据管理

  4. 电话服务

  5. 分布式应用开发

  6. 通知与窗口管理

  7. 多媒体技术

  8. 安全技能

  9. 任务管理

  10. WebGL

  11. 国际化开发

  12. 应用测试

  13. DFX面向未来设计

  14. 鸿蒙系统移植和裁剪定制

  15. ……

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

《鸿蒙开发实战》

  1. ArkTS实践

  2. UIAbility应用

  3. 网络案例

  4. ……

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统

 获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

OpenHarmony开发实例:【新闻客户端】,鸿蒙开发,harmonyos,鸿蒙开发,程序员,移动开发,鸿蒙,OpenHarmony,鸿蒙系统文章来源地址https://www.toymoban.com/news/detail-860673.html

到了这里,关于OpenHarmony开发实例:【新闻客户端】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vite+vant+vue3新闻客户端app(一)

    http://toutiao.itheima.net/api.html#u5173u6ce8u7528u62370a3ca20id3du5173u6ce8u7528u62373e203ca3e https://gitee.com/git640640/news 你还可以通过附加的命令行选项直接指定项目名称和你想要使用的模板。例如,要构建一个 Vite + Vue 项目,运行: 安装结束,命令提示你项目创建成功,按照命令行的提示在终端

    2024年02月09日
    浏览(38)
  • Android 毕业设计 - 高仿今日头条新闻客户端(内附源码)

    源码下载地址 :https://download.csdn.net/download/yujun2023/87897511 一直都想尝试开发自己还没接触过的某类APP,以前刚入门的时候,就有一个梦想:开发社交类、地图类、新闻类、支付、电商类、直播类、游戏类这些APP。社交类的大二的时候已经开发过一款即时通讯的APP,用的是网易

    2024年02月02日
    浏览(44)
  • 智能合约入门开发实例

    web3开发:前端使用ethers.js调用Hello智能合约。 hello.sol 智能合约文件: dapp.html  前端文件:

    2024年02月02日
    浏览(50)
  • 鸿蒙开发实例 | 分布式涂鸦

    CSDN话题挑战赛第2期 参赛话题:学习笔记  本篇文章介绍分布式设备间如何共享涂鸦画板的核心功能。 在涂鸦画板中有3个核心功能:     (1) 涂鸦者选择好希望连接的设备后,可以直接把涂鸦成果流转给对应的设备。     (2) 其他设备接收流转的涂鸦后,可以在涂鸦的基础上添

    2024年02月09日
    浏览(53)
  • 安卓开发实例:方向传感器

    调用手机的方向传感器,X轴,Y轴,Z轴的数值 activity_sensor.xml Sensor.java

    2024年02月06日
    浏览(47)
  • HarmonyOS开发实例:【分布式邮件】

    基于TS扩展的声明式开发范式编程语言编写的一个分布式邮件系统,可以由一台设备拉起另一台设备,每次改动邮件内容,都会同步更新两台设备的信息。效果图如下: 完成本篇Codelab我们首先要完成开发环境的搭建,本示例以 Hi3516DV300 开发板为例,参照以下步骤进行: [获取

    2024年04月28日
    浏览(59)
  • HarmonyOS 开发实例—蜜蜂 AI 助手

    自华为宣布 HarmonyOS NEXT 全面启动,近期新浪、B 站、小红书、支付宝等各领域头部企业纷纷启动鸿蒙原生应用开发。据媒体统计,如今 Top20 的应用里,已经有近一半开始了鸿蒙原生应用开发。虽然目前 HarmonyOS NEXT 还未面向个人开发者开放,但我们可以体验并使用最新的 API

    2024年02月04日
    浏览(51)
  • HarmonyOS 远端状态订阅开发实例

    IPC/RPC 提供对远端 Stub 对象状态的订阅机制, 在远端 Stub 对象消亡时,可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现消亡通知接口 DeathRecipient 并实现 onRemote

    2024年02月07日
    浏览(51)
  • Arduino开发实例-Arduino中断详解

    本文是关于Arduino中断的文章。中断是一种让Arduino在特定事件发生时执行特定代码的功能。中断可以让Arduino在后台执行一些重要的任务,也可以让Arduino在低功耗模式下被唤醒。中断的使用需要注意一些细节和注意事项,本文将介绍中断的基本概念、使用方法和示例。 中断是

    2024年02月11日
    浏览(55)
  • 关于微信小程序云开发以及云开发实例展示

    本文分享给使用 微信云开发 的同学 首先, 云开发 是一种趋势,因为跨平台解决方案可以提高开发效率,减少开发成本。使用云开发,开发者无需关注服务器、网络和数据库等底层技术,可以专注于业务逻辑的开发,从而减少了开发和运维方面的投入。 云开发的最大优点之

    2024年02月11日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包