《农物购》app开发技术分享《四》-- HarmonyOS 鸿蒙Next资讯中心模块

发布于 1周前 作者 eggper 来自 鸿蒙OS

《农物购》app开发技术分享《四》-- HarmonyOS 鸿蒙Next资讯中心模块

在上一节我们实现商城首页的banner和金刚区功能,并且实现了banner的切换、底部数字指示器的、金刚区灯功能,现在我们来继续完善我们的首页内容,这节我们要实现的内容是资讯中心模块,分为上下两个部分,一个是资讯中心可以点击的头,一个是可以切换可以点击的新闻条目

cke_32400.png

可以看到在index中展示的样式如下

开发准备 

我们要先对组件进行分析看看我们要实现的功能是什么

首先是上半部分

cke_50120.png

可以看到有资讯中心字样 还有当前的位置 以及一个图标,横向排列。

然后是下半部分

cke_73161.png

整体横向排列,图片、标题、时间展示

功能实现

首先实现上半部分

@Preview
@Component
export struct NewPage {
build() {
Column({ space: 5 }) {
Row(){
Text(“资讯中心”)
Divider().vertical(true).height(22).color(’#182431’).opacity(0.6).margin({ left: 8, right: 8 })
Text(“浙江杭州”)
Blank()

    Image($r(<span class="hljs-string">'app.media.right'</span>))
      .height(<span class="hljs-number">15</span>)
      .width(<span class="hljs-number">15</span>)
  }
  .padding({left:<span class="hljs-number">10</span>,right:<span class="hljs-number">10</span>})
  .width(<span class="hljs-string">'100%'</span>)

}.width(<span class="hljs-string">'100%'</span>)
.margin({ top: <span class="hljs-number">5</span> })

} }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

这里依旧选择用自定义组件引用的方式,执行代码后预览器显示如下

cke_124960.png

接下来实现下半部分

先定义一下数据源

  private imgList:ESObject[]=[
{“img”:https://inews.gtimg.com/om_bt/OtwKRSDaiFoI7MaxtLQAjKPk9HFwww6tMYybn1BjzxWCEAA/641 ,
“title”:“蔬菜也能“紫气东来”?”,
“timeStr”:“2024-12-31 11:56”,
“url”:https://news.qq.com/rain/a/20241231A04JV800},

{<span class="hljs-string">"img"</span>:<span class="hljs-string">"https://inews.gtimg.com/om_bt/O-8DmkSZrXGMvRVD0SCG6VDXdQoF0zXmTJZA1AwTaNZhMAA/641"</span> ,
  <span class="hljs-string">"title"</span>:<span class="hljs-string">"洪山菜薹成江城蔬菜顶流"</span>,
  <span class="hljs-string">"timeStr"</span>:<span class="hljs-string">"2024-12-30 08:30"</span>,
  <span class="hljs-string">"url"</span>:<span class="hljs-string">"https://news.qq.com/rain/a/20241230A01SRF00"</span>}

] <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

然后我们用swiper来实现

  Swiper(this.swiperController) {
ForEach(this.imgList, (item: ESObject, index: number) => {

      Row(){
        Image(item.img).width(<span class="hljs-number">90</span>).height(<span class="hljs-number">90</span>)
          .borderRadius(<span class="hljs-number">10</span>)
          .padding(<span class="hljs-number">10</span>)
        Text(item.title)
          .fontSize(<span class="hljs-number">20</span>)


        Column(){
          Blank()
          Text(item.timeStr)
        }.height(<span class="hljs-string">'100%'</span>)
      }
      .padding({left:<span class="hljs-number">10</span>,right:<span class="hljs-number">10</span>})

    })
  }
  .height(<span class="hljs-number">200</span>)
  .indicator(<span class="hljs-literal">false</span>)</code><button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button></pre>  <p>执行代码后,预览器展示如下</p>  <p></p>  <p><span class="easyimage easyimage-full"><img class="previewableImage" alt="cke_188025.png" data-originheight="1116" data-originwidth="1828" src="https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/362/149/808/2850086000362149808.20241231145810.74808103086059122553397159432060:50001231000000:2800:037C0EF8D88FB7F4252AAA44FA67AEBC4DA4D3E99BA3A4EA93268C844F3DF4D3.png"></span></p>  <p>完整代码如下:</p>  <pre style="position: relative;"><code class="language-javascript hljs ">[@Preview](/user/Preview)

@Component export struct NewPage { private swiperController: SwiperController = new SwiperController(); private imgList:ESObject[]=[ {“img”:https://inews.gtimg.com/om_bt/OtwKRSDaiFoI7MaxtLQAjKPk9HFwww6tMYybn1BjzxWCEAA/641 , “title”:“蔬菜也能“紫气东来”?”, “timeStr”:“2024-12-31 11:56”, “url”:https://news.qq.com/rain/a/20241231A04JV800},

{<span class="hljs-string">"img"</span>:<span class="hljs-string">"https://inews.gtimg.com/om_bt/O-8DmkSZrXGMvRVD0SCG6VDXdQoF0zXmTJZA1AwTaNZhMAA/641"</span> ,
  <span class="hljs-string">"title"</span>:<span class="hljs-string">"洪山菜薹成江城蔬菜顶流"</span>,
  <span class="hljs-string">"timeStr"</span>:<span class="hljs-string">"2024-12-30 08:30"</span>,
  <span class="hljs-string">"url"</span>:<span class="hljs-string">"https://news.qq.com/rain/a/20241230A01SRF00"</span>}

]

build() { Column({ space: 5 }) { Row(){ Text(“资讯中心”) Divider().vertical(true).height(22).color(’#182431’).opacity(0.6).margin({ left: 8, right: 8 }) Text(“浙江杭州”) Blank()

    Image($r(<span class="hljs-string">'app.media.right'</span>))
      .height(<span class="hljs-number">15</span>)
      .width(<span class="hljs-number">15</span>)
  }
  .padding({left:<span class="hljs-number">10</span>,right:<span class="hljs-number">10</span>})
  .width(<span class="hljs-string">'100%'</span>)

  Swiper(<span class="hljs-keyword">this</span>.swiperController) {
    ForEach(<span class="hljs-keyword">this</span>.imgList, (item: ESObject, index: number) =&gt; {

      Row(){
        Image(item.img).width(<span class="hljs-number">90</span>).height(<span class="hljs-number">90</span>)
          .borderRadius(<span class="hljs-number">10</span>)
          .padding(<span class="hljs-number">10</span>)
        Text(item.title)
          .fontSize(<span class="hljs-number">20</span>)


        Column(){
          Blank()
          Text(item.timeStr)
        }.height(<span class="hljs-string">'100%'</span>)
      }
      .padding({left:<span class="hljs-number">10</span>,right:<span class="hljs-number">10</span>})

    })
  }
  .height(<span class="hljs-number">200</span>)
  .indicator(<span class="hljs-literal">false</span>)
}.width(<span class="hljs-string">'100%'</span>)
.margin({ top: <span class="hljs-number">5</span> })

} }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

我们在index 页面中去引用这个自定义组件

TabContent() {
Column(){
BannerPage()
TopListPage()
NewPage()
}
.height(‘100%’)

}
.tabBar(this.tabBuilder(“首页”,0,$r(‘app.media.index1_check’),$r(‘app.media.index1_not_check’)))

执行代码后展示如下

cke_264885.png


更多关于《农物购》app开发技术分享《四》-- HarmonyOS 鸿蒙Next资讯中心模块的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于《农物购》app开发技术分享《四》-- HarmonyOS 鸿蒙Next资讯中心模块的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


《农物购》app开发技术分享《四》-- HarmonyOS 鸿蒙Next资讯中心模块

在《农物购》app的HarmonyOS鸿蒙Next资讯中心模块开发中,我们充分利用了鸿蒙系统的分布式能力,实现了跨设备的信息同步与展示。

资讯中心模块采用了鸿蒙系统的ArkUI框架进行界面开发,通过声明式UI组件,快速构建了资讯列表、详情页等页面。同时,利用鸿蒙系统的数据绑定和事件处理机制,实现了资讯内容的动态更新和用户交互的流畅响应。

在数据处理方面,我们采用了鸿蒙系统的分布式数据管理功能,实现了资讯数据的跨设备同步。通过定义统一的数据模型,并在不同设备上注册相应的数据同步服务,确保了资讯内容在多设备间的一致性。

此外,我们还利用了鸿蒙系统的通知和快捷服务等功能,为用户提供了更加便捷的资讯获取方式。当用户收到新资讯通知时,可以直接在通知栏中查看资讯摘要,并通过快捷服务快速进入详情页。

在开发过程中,我们遇到了不少技术挑战,但通过查阅鸿蒙系统的官方文档和社区资源,最终都得以顺利解决。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部