首页 > 其他分享 >鸿蒙开发之音乐收藏界面

鸿蒙开发之音乐收藏界面

时间:2024-06-30 17:58:25浏览次数:3  
标签:界面 鸿蒙 Item media app 收藏 width 组件 margin

一、项目概述

本项目是基于ArkTS环境编写QQ音乐的收藏歌曲的页面,结构也偏简单。适合新手参考。以下是预览图及其结构图:

二、项目分解

因为这个页面自定义小组件比较多,所以也抽取一部分以简写代码,整个页面用Tab组件包装。其中又分为歌曲列表部分和搜索栏,还有底部的歌单播放列表。以下分别介绍这几个部分。

2.1Tab标签部分及标题部分

因为我们只做第一个页面的部分,所以这整个Tab标签结构简单。而标题部分在Tab之上,所以这个代码的主体部分如下,以下将根据这个主体代码分步详解:

import Header from '../commont/CommonComponents'
import MusicList from '../commont/MusicList'
import Find from '../commont/SearchCommon'
import ShouCang from '../Service/ShouCang'
@Entry
@Component
struct LoveSong {
  build() {
    Stack({alignContent: Alignment.Bottom}){
      Column({space:5}){
        Header({title:'我的收藏'})
          .margin({top:10})
        Tabs(){
          TabContent(){
            Flex({direction:FlexDirection.Column}){
              Find()
              Row({space:5}){
                Image($r('app.media.vidio2'))
                  .width(30)
                Text('全部播放')
                  .fontSize(20)
                Blank(110)
                Image($r('app.media.list2'))
                  .width(30)
                Image($r('app.media.download2'))
                  .width(30)
                Image($r('app.media.list1'))
                  .width(30)
              }
              .margin({left:8})
             .height(40)

              ShouCang()
            }
            .width('100%')
            .height('100%')

          }.tabBar('歌曲')

          TabContent(){
            Text('专辑')
          }.tabBar('专辑')
          TabContent(){
            Text('歌单')
          }.tabBar('歌单')
          TabContent(){
            Text('视频')
          }.tabBar('视频')
        }
        .width('100%')
        .height('100%')
        .barMode(BarMode.Fixed)

      }
      .backgroundImage($r('app.media.back'))
      .width('100%')
      .height('100%')

      MusicList().margin({bottom:8})
    }

  }
}

其中,Header自定义函数是我们自定义的标题部分,其代码如下,只需导出应用到以上代码中即可:

import router from '@ohos.router'
@Component
export default struct Header {
  private title:ResourceStr
  build() {
    Row({space:5}) {
      Image($r('app.media.left'))
        .width(30)
        .margin({left:10})
        .onClick(() => {
          router.back()
        })
      Blank()
      Text(this.title)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
      Image($r('app.media.setting2'))
        .width(30)
        .margin({left:10})
      Image($r('app.media.share'))
        .width(30)
        .margin({left:5})
      Image($r('app.media.more2'))
        .width(30)
        .margin({right:10})
    }
    .width('100%')
    .height(30)
  }
}
2.2、搜索栏部分

这部分很简单,只需要用到Search组件,再用Row组件包裹,设置样式和边距即可。依照官方文档中Search组件的介绍属性应用即可。

官方文档——Search组件

@Component
export default struct Find {
  @State changeValue: string = ''
  controller: SearchController = new SearchController()

  build() {
    Row(){
      Search({value: this.changeValue, placeholder:'搜索', controller: this.controller})
        .width('90%')
        .height(35)
        .backgroundColor('#F5F5F5')
        .placeholderColor(Color.Grey)
        .placeholderFont({size:16, weight:200})
        .textFont({size:16, weight:200})
        .margin({top:3})
    }
    .width('100%')
    .height(35)
    .justifyContent(FlexAlign.SpaceAround)
  }
}
2.3、歌曲列表部分

这部分和商城列表差不多,同样是用List组件来包装,不同的是对单个数组的样式设置。需要注意的是每个部分之间需要的距离。代码如下:

class Item{
  index:number
  name:string
  singer:string
  constructor(index:number,name:string,singer:string) {
    this.index = index
    this.name = name
    this.singer = singer
  }
}

@Builder function SongList(item:Item){
    Row({space:10}){
      Text(item.index.toFixed())
        .fontSize(18)
      Column({space:3}){
        Text(item.name)
          .fontSize(18)
        Text(item.singer)
          .fontSize(14)
      }
      .justifyContent(FlexAlign.Start)
      .alignItems(HorizontalAlign.Start)
      Blank()
      Image($r('app.media.bofang3'))
        .width(25)
      Image($r('app.media.more2'))
        .width(25)
    }.width('100%').margin(2)
}
@Preview
@Component
export default struct ShouCang {
  private items:Array<Item> =[
    new Item(1,'夜幕之下','小曲儿/白翎'),
    new Item(2,'無告','MY FIRST STORY'),
    new Item(3,'Seven Days "Prismagic"','Switch'),
    new Item(4,'No name yet (此刻无名)','Double Face'),
    new Item(5,'Nothing In The Story','MY FIRST STORY'),
    new Item(6,'Said that','Xlamv'),
    new Item(7,'FLY HIGH!!!','BAE'),
    new Item(8,'WITHOUT ME','GYROAXIA'),
    new Item(9,'GET MYSELF','GYROAXIA'),
    new Item(11,'火花散ル','GYROAXIA'),
    new Item(12,'LIAR','GYROAXIA'),
    new Item(13,'葬花','THT'),
  ]

  build() {
    Column(){
      List({space:8}){
        ForEach(this.items,(item:Item) =>{
          ListItem(){
           SongList(item)
          }
        })
      }
      .width('100%')
      .height('90%')
    }
    .margin({left:10,right:10})
  }
}
2.4、 底部播放列表

这个部分也很简单,主体只需Row组件包裹,每个元素分别设置好宽度和边距即可。

值得注意的是,这个播放图片的进度条是Progress组件,因为以后这个进度条是会根据音乐播放而改变数值,在这里只是先做模拟,定了一个固定数值。

而这个进度条组件和播放图标是嵌套的,需要Stack组件进行嵌套。这两个组件可以根据官方文档了解。

官方文档——Progress组件     官方文档——Stack组件

@Component
export default struct MusicList {
  build() {
    Row(){
      Image($r('app.media.changpian'))
        .width(30)
        .margin({left:10,top:5})
      Text('QQ音乐 听我想听')
        .margin({right:80})

      Stack(){
        Image($r('app.media.Bofang2'))
          .width(30)
        Progress({value:30,type:ProgressType.Ring})
          .width(40)
          .height(40)
      }
      Image($r('app.media.list'))
        .width(25)
        .margin(3)
    }
    .margin(5)
    .backgroundColor(Color.Gray)
    .height(50)
    .width('90%')
    .borderRadius(25)
  }
}
 2.5、Tab和底部列表的嵌套

常用音乐软件的我们都知道,我们滑动音乐列表时,底部表示播放歌曲的部分并不会划走。这就用到了上面说过的Stack堆叠容器组件,通过这个组件把页面和底部播放部分绑定在一起,这样就实现了我们需要的效果。

代码如下,(整体代码在开头)

三、总结

通过以上的讲解,我们可以了解到。编写页面代码最重要的是各个组件之间的灵活运用。更多具体组件的应用就移步官方文档吧。

官方文档

标签:界面,鸿蒙,Item,media,app,收藏,width,组件,margin
From: https://blog.csdn.net/2401_83401870/article/details/140071562

相关文章

  • 鸿蒙开发实践项目——商城列表
     一、项目概述在ArkTS环境中运用各个组件简单构建一个商城列表的页面,要求熟练掌握基本组件的用法以及灵活运用的程度。同时页面布局较为简单,适用于鸿蒙开发的新手的实践项目。总体构建页面最终如下:二、项目结构根据预览图可先构建出一副构架图。同时因为所需编写的代码比......
  • 华为HDC开发者大会鸿蒙进展超预期
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在数字化浪潮的推动下,华为鸿蒙系统(HarmonyOS)以其革命性的创新,引领着全球科技的新趋势。2024年华为开发者大会(HDC2024)上,华为揭开了HarmonyOSNEXT的神秘面纱,标志着"......
  • Vue登录界面设计开发
    目录前言图示详细代码前言  市面上大多的软件,在登录的时候给用户提供了超过一种的登录方式,常见的有手机短信登录、账号密码登录、app扫码登录,要想将这些功能组合在一起,就需要实现表单的切换功能,下面我将为你展示功能具体实现过程。图示详细代码template部分......
  • C30 基础应用界面和应用程序(Part 6)
    本节导读演示如何使用JavaScript和Python设计和发布地球引擎应用程序。介绍地球引擎用户界面JavaScriptAPI和geemapPython包。在完成本节后,你将能够发布一个带有拆分面板地图的地球引擎应用程序,用于可视化土地覆盖变化。主要内容:使用JavaScript为地球引擎应用程序设计一个用......
  • 【鸿蒙】ERROR_GET_BUNDLE_INSTALLER_FAILED
    错误信息[ERROR_GET_BUNDLE_INSTALLER_FAILED]Troubleshootingguide$hdcfilesendD:\Huawei\devEcoProjects\entry\build\default\outputs\default\entry-default-unsigned.hap/sdcard/e8a215ea7be1444197e6a58ebda7721f/entry-default-unsigned.hapErrorwhile......
  • m基于深度学习的卫星遥感图像轮船检测系统matlab仿真,带GUI操作界面
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要      在卫星遥感图像轮船检测中,常用的深度学习模型主要包括卷积神经网络(CNN)、循环神经网络(RNN)、以及两者的混合模型,但最常使用的还是基于CNN的模型,特别是那些在目标检测任务中表现出......
  • 【鸿蒙毕设源码】鸿蒙应用商城app
    基于鸿蒙的应用市场app本项目分为管理员和用户两个角色其中管理员使用web管理后台,用户使用鸿蒙app鸿蒙基于ArkTS、Api9、stage模型开发后端支持PHP和Java的Springboot代码PHP版代码:【鸿蒙】基于PHP的鸿蒙应用市场基于鸿蒙的应用市场app本项目分为管理员和用户两个角色其中......
  • python基础 - Qt5设计界面
    1、QtDesigner环境搭建1、安装PySide2库cmd里运行pipinstallPySide2-ihttps://pypi.douban.com/simple--trustedhostpypi.douban.com2、Pycharm关联DesignerFile->Settings->Tools->ExternalTools,打开页面。目的:用于快速设计、修改ui并生成.ui文件。Program......
  • HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”
    6月21-23日,华为开发者大会(HDC2024)盛大开幕。6月23日上午,《HarmonyOS开放能力,使能应用原生易用体验》分论坛成功举办,大会邀请了多位华为技术专家深度解读如何通过根技术、开放能力、场景化控件等亮点能力,基于人的感知及操作习惯进而设计出更简单易用的鸿蒙原生应用体验,并邀请头部......
  • 分类判决界面---W-H、H-K算法
        本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:   AI学习笔记(9)---《分类判决界面---W-H、H-K算法......