微博-消息-发现群页面

微博-消息-发现群页面

如何制作发现群的页面?将页面分为7个部分,分别是:表头、搜索、图片、轮播、主体、感兴趣、list循环页面。

  1. 表头

表头我用到自定义组件,里面有三个部分,返回键、文本和图片。这里返回键用的是输入法的符号表示的(输入法输入‘zuo’)。Blank是填空空白。

@Component
struct  Head{
  build(){
    Row({space:10}){
      Text('←')
        .fontSize(35)
        .width(40)
             Blank()
      Text('
发现群')
        .fontSize(20)
      Blank()
      Image($r('app.media.gengduo'))
        .width(30)
    }
    .width('100%')
    .padding(10)
  }
}

在主体框架中调用。

@Entry
@Component
struct Group {

build() {
  Column(){
    //
表头
    Head()

}}}

  1. 搜索

使用TextInput添加输入框,这里面有个搜索的图案,使用的是层叠。这里面使用了一个组件控制器,在struct Group中写。

TextInputController:TextInputController = new TextInputController()

在build中写入文本,这里添加了提示文本:placeholder。

//搜索
Stack(){
  TextInput({placeholder:'
搜索群',controller:this.TextInputController})
    .textAlign(TextAlign.Center)
    .width('95%')
  Image($r('app.media.search')).width('25').margin({right:80})
}

  1. 粉丝群

这里只需要一张图片,调整大小即可。

//粉丝群
Image($r("app.media.group1")).width('100%').padding(10)

  1. 轮播

首先先在struct Group添加一个控制器。

private swiperController: SwiperController = new SwiperController()

轮播的画面我们使用的forEach循环来遍历数组。

  • 定义class类定义数据类型。

class down{
  img:ResourceStr
  content:string
  img1:ResourceStr
    constructor(img:ResourceStr,content:string,img1:ResourceStr) {
      this.img=img
      this.content=content
      this.img1=img1
    }
}

  • 添加轮播需要添加的数据。

private downs:Array<down>=[
 new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
  new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
  new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right'))
]

  • 在build添加轮播组件,利用forEack循环遍历数组。下面是这里利用到的属性,除了最后一个是number类型,剩下的是都是boolean类型。

Indicator:导航点指示器,

Vertical:纵向滑动,

Loop:循环,

autoPlay:自动播放,

interval:使用自动播放时播放的时间间隔。

Swiper(this.swiperController){
  ForEach(this.downs,(item:down)=>{
    Row(){
      Row({space:15}){
        Image(item.img).width(30)
        Text(item.content)
      }.margin({left:10})
      Image(item.img1).width(20)
    }
    .justifyContent(FlexAlign.SpaceBetween)
    .padding(5)
    .width('95%')
  })
}
.indicator(false)
.vertical(true)
.loop(true)

.autoPlay(true)
.interval(1500)

这里添加了一个Divider()分割线。

Divider().color('#EEEEEE').strokeWidth(10).width('95%')

  1. 主体

这里用的list列表中嵌套ForEach循环,这里面为了方便,图片只使用了教育的图片。

  • 定义class类定义数据类型。

class contiltle{
  img2:ResourceStr
  content1:string
  constructor( img2:ResourceStr,content1:string) {
    this.img2=img2
    this.content1=content1
  }
}

  • 添加列表需要添加的数据。

private downs:Array<down>=[
  new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
  new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
  new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right'))
]

  • 使用ForEach循环遍历再调整样式。

listDirection(Axis.Horizontal):主轴方向为垂直方向,

lanes:行数。

List(){
    ForEach(this.contitles,(item:contiltle)=>{
      ListItem(){
      Row(){
        Column({space:10}){
          Image(item.img2).width(30)
          Text(item.content1).fontSize(14)
        }
      }.width('20%')
        .justifyContent(FlexAlign.Center)
      }
    })
}
.listDirection(Axis.Horizontal)
.width('100%')
.lanes(2)
.height(160)
.padding(15)

在添加一次分割线。

Divider().color('#EEEEEE').strokeWidth(10).width('95%')

  1. 感兴趣

这里面有一个黄色的竖线,和文本。黄色的竖线用的是Shape中的Rect(矩形),再用fill填充颜色。

Row({space:10}){
  Shape(){
    Rect({width:4,height:25}).fill('#FA5F55')
  }
  Text('
你可能感兴趣')
}.padding(8)
.justifyContent(FlexAlign.Start)
.width('100%')

添加一个分割线。

Divider().width('95%').color('#EEEEEE')

  1. Liat循环

这里也使用的list嵌套ForEach循环。

    • 定义class类的数据类型。

class interest{
  Himg:ResourceStr
  name:string
  title:string
  content3:string
  Fimg:ResourceStr
constructor( Himg:ResourceStr,name:string,title:string,content:string,Fimg:ResourceStr) {
    this.Himg=Himg
    this.name=name
    this.title=title
    this.content3=content
    this.Fimg=Fimg
  }
}

    • 添加感兴趣群的数据

private interests:Array<interest>=[
  new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
  new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
  new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
  new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun'))

]

    • 、使用ForEach循环遍历再调整样式。

BarState.Auto:表示按需显示滚动条。

List(){
  ForEach(this.interests,(item:interest)=>{
    ListItem(){
      Row(){
        Row({space:15}){
          Image(item.Himg).width(60)
          Column({space:5}){
            Text(item.name).fontSize(14)
      Text(item.title).fontSize(10).fontColor('#FA5F55').backgroundColor('#FDDDCA')
            Text(item.content3).fontSize(10)
          }.alignItems(HorizontalAlign.Start)
        }
          Image(item.Fimg).width(80)
      }.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(15).alignItems(VerticalAlign.Top)
    }

  })
}.scrollBar(BarState.Auto)
.height('40%')
.divider({
  strokeWidth: 1,
  startMargin: 60,
  endMargin: 10,
  color: '#ffe9f0f0'
})

  1. 源代码

import router from '@ohos.router'
import Network from '@system.network'
//
表头部分
@Component
export default  struct  Head{
  build(){
    Row({space:10}){
      Text('←')
        .fontSize(35)
        .width(40)
        .onClick(()=>{
          //
返回上一级
          router.back()
        })
      Blank()
      Text('
发现群')
        .fontSize(20)
      Blank()
      Image($r('app.media.gengduo'))
        .width(30)
    }
    .width('100%')
    .padding(10)
  }
}
class down{
  img:ResourceStr
  content:string
  img1:ResourceStr
    constructor(img:ResourceStr,content:string,img1:ResourceStr) {
      this.img=img
      this.content=content
      this.img1=img1
    }
}
class contiltle{
  img2:ResourceStr
  content1:string
  constructor( img2:ResourceStr,content1:string) {
    this.img2=img2
    this.content1=content1
  }
}
class interest{
  Himg:ResourceStr
  name:string
  title:string
  content3:string
  Fimg:ResourceStr
constructor( Himg:ResourceStr,name:string,title:string,content:string,Fimg:ResourceStr) {
    this.Himg=Himg
    this.name=name
    this.title=title
    this.content3=content
    this.Fimg=Fimg
  }
}
@Entry
@Component
struct Group {
  TextInputController:TextInputController = new TextInputController()
  private swiperController: SwiperController = new SwiperController()
  //
轮播页面
  private downs:Array<down>=[
    new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
    new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right')),
    new down($r('app.media.2dongman1'),'
小野...昨天2037空降粉丝群',$r('app.media.arrow_right'))
  ]
  //
组件页面
  private contitles:Array<contiltle>=[
    new contiltle($r('app.media.Group_title'),'
教育'),
    new contiltle($r('app.media.Group_title'),'
美妆'),
    new contiltle($r('app.media.Group_title'),'
幽默搞笑'),
    new contiltle($r('app.media.Group_title'),'
动漫'),
    new contiltle($r('app.media.Group_title'),'
时尚'),
    new contiltle($r('app.media.Group_title'),'
美食'),
    new contiltle($r('app.media.Group_title'),'
母婴育儿'),
    new contiltle($r('app.media.Group_title'),'
读书作家'),
    new contiltle($r('app.media.Group_title'),'
游戏'),
    new contiltle($r('app.media.Group_title'),'
更多')
  ]
  //
感兴趣群页面
  private interests:Array<interest>=[
    new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
    new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
    new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun')),
    new interest($r('app.media.2dongman5'),'
真好吃','246','野生炸姐的粉丝群',$r('app.media.Group_qun'))
  ]
  build() {
    Column(){
      //
表头
      Head()
      //
搜索
      Stack(){
        TextInput({placeholder:'
搜索群',controller:this.TextInputController})
          .textAlign(TextAlign.Center)
          .width('95%')
        Image($r('app.media.search')).width('25').margin({right:80})
      }
      //
粉丝群
      Image($r("app.media.group1")).width('100%').padding(10)
      //
轮播
      Swiper(this.swiperController){
        ForEach(this.downs,(item:down)=>{
          Row(){
            Row({space:15}){
              Image(item.img).width(30)
              Text(item.content)
            }.margin({left:10})
            Image(item.img1).width(20)
          }
          .justifyContent(FlexAlign.SpaceBetween)
          .padding(5)
          .width('95%')
        })
      }
      .indicator(false)
      .vertical(true)
      .loop(true)
      .autoPlay(true)
      .interval(1500)
      Divider().color('#EEEEEE').strokeWidth(10).width('95%')
      //
教育、美妆...页面
      List(){
          ForEach(this.contitles,(item:contiltle)=>{
            ListItem(){
            Row(){
              Column({space:10}){
                Image(item.img2).width(30)
                Text(item.content1).fontSize(14)
              }
            }.width('20%')
              .justifyContent(FlexAlign.Center)
            }
          })
      }
      .listDirection(Axis.Horizontal)
      .width('100%')
      .lanes(2)
      .height(160)
      .padding(15)
      Divider().color('#EEEEEE').strokeWidth(10).width('95%')
      //
你可能感兴趣
      Row({space:10}){
        Shape(){
          Rect({width:4,height:25}).fill('#FA5F55')
        }
        Text('
你可能感兴趣')
      }.padding(8)
      .justifyContent(FlexAlign.Start)
      .width('100%')
      Divider().width('95%').color('#EEEEEE')
      //
感兴趣的群
      List(){
        ForEach(this.interests,(item:interest)=>{
          ListItem(){
            Row(){
              Row({space:15}){
                Image(item.Himg).width(60)
                Column({space:5}){
                  Text(item.name).fontSize(14)                  Text(item.title).fontSize(10).fontColor('#FA5F55').backgroundColor('#FDDDCA')
                  Text(item.content3).fontSize(10)
                }.alignItems(HorizontalAlign.Start)
              }
                Image(item.Fimg).width(80)
            }.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(15).alignItems(VerticalAlign.Top)
          }
        })
      }.scrollBar(BarState.Auto)
      .height('40%')
      .divider({
        strokeWidth: 1,
        startMargin: 60,
        endMargin: 10,
        color: '#ffe9f0f0'
      })
    }
    .width('100%')
    .alignItems(HorizontalAlign.Center)
  }
}

  1. 页面效果


  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值