给顶部最左边的日历图标设置点击事件实现页面跳转
需要展示页面内容示例图:
6.1.1.设置页面头部内容
新建一个页面命名为MydailyPage ,给整个页面设置背景属性
代码如下:
@Entry
@Component
struct MydailyPage {
build() {
Column() {
}
.height('100%')
.backgroundColor(Color.Black)
}
}
(1)自定义变量的值
代码示例:
@State message: string = '记录我的日常'
@State name :string='用户5348130863'
@State title:string ='随时随地记录生活'
(2)在build里面添加内容
Row() {
Image($r("app.media.quxiao1")).width(25).height(25)
Text(this.message)
.fontSize(20)
.fontColor(Color.White).margin(20)
Image($r("app.media.wurao1")).width(25).height(25)
}
.justifyContent(FlexAlign.SpaceAround)
.width('100%')
运行效果:
(3)利用线性布局绘制用户名以及头像
代码示例:
Row(){
Image($r('app.media.meme')).width(60).height(60)
.borderRadius(50).margin({left:10})
Column(){
Text(this.name) .fontColor(Color.White).margin(12)
Text(this.title) .fontColor(Color.White)
}
}
.width('100%')
.height(80)
6.1.2.利用线性布局添加日历内容,并添加border属性
(1)定义一个head类用来封装
class head{
weekend: string
num:string
constructor( weekend: string,num:string) {
this.weekend =weekend
this.num=num
}
}
(2)自定义一个clender的列表用来封装内容
@Provide clender:Array<head> =[
new head('周日','5'),
new head('周一','6'),
new head('周二','今天'),
new head('周三','8'),
new head('周四','9'),
new head('周五','10'),
new head('周六','11'),
]
(3)利用ForEach循环渲从而减少代码量
代码示例:
Row(){
Text('5月日历').fontColor(Color.White).fontSize(25)
}.margin({left:200})
Row({space:10}){
ForEach(this.clender,(item:head)=>{
Column({space:10}){
Text(item.weekend).fontColor(Color.White).fontSize(20)
Text(item.num).fontColor(Color.White)
}
})
} .border({ style: BorderStyle.Solid, width: 1, radius: 5, color: '#1a1d26' })
.backgroundColor('#1a1d26' )
.height(100)
.width('95%')
给Row容器添加border属性,从而实现效果
6.1.3.利用list组件以及ForEach循环渲染
(1)定义recoder类用来封装
代码示例:
class recoder{
title:string
content :string
color:string
constructor( title:string,content :string, color?:string) {
this.title = title
this.content = content
this.color=color
}
}
(2)自定义构建函数list列表
代码示例:
@Provide life:Array<recoder> =[
new recoder('初夏随手拍','活动小队长 ...','#FFC125'),
new recoder('记录生活 ...','活动小队长 ...','#43CD80'),
new recoder('每日一餐 ...','热度值:193.2w','#ff5995d0'),
new recoder('随手拍打卡','热度值:243.6w','#FF69B4'),
new recoder('匿名世界','绿洲 创建','#663399'),
new recoder('视频快拍','记录精彩瞬间','#ff00ff'),
new recoder('每天摸鱼','活动小队长 ...','#FFC125'),
new recoder('追剧打卡 ','热度值:191.2w','#43CD80'),
new recoder('坚持运动','热度值:124.7w','#ff5995d0'),
]
(3)创建构造函数Sharelife
代码示例:
@Builder function Sharelife(item:recoder){
Column(){
Text(item.title).fontSize(18).fontColor(Color.White)
Text(item.content).fontColor(Color.White)
Button('...').backgroundColor(Color.Transparent).margin({left:50})
}.border({ style: BorderStyle.Solid, width:1, radius: 10, color:Color.Grey })
.width(110).height(90)
.backgroundColor(item.color)
.margin(5)
}
(4)利用list,ForEach循环渲染
代码示例:
Divider().height(10)
Image($r('app.media.lifebook')).width('95%').height(100)
Row(){
List(){
ForEach(this.life,(item:recoder)=>{
ListItem(){
Sharelife(item)
}
})
}.listDirection(Axis.Horizontal)
.lanes(3) //设置行数
}.width('100%')
.height('40%')
6.1.4. 设置底部内容
代码示例:
Row(){
Text('查看更多').fontColor(Color.White)
Image($r('app.media.select')).width(30)
}.height('7%').width('95%')
.justifyContent(FlexAlign.Center)
.border({ style: BorderStyle.Solid, width: 1, radius: 10, color: '#1a1d26' })
.backgroundColor('#1a1d26')
6.2 .给页面添加路由实现跳转
(1)给MicrBlogPage和MydailyPage页面导包
代码示例:
import router from '@ohos.router';
(2)回到MicrBlogPage页面添加点击事件
代码如下:
Row() {
Image($r('app.media.sign_in')).fancy().margin({ top: 20, left: 20 })
.onClick(() => {
router.pushUrl({
url: 'pages/HQ/MydailyPage'
}, router.RouterMode.Single, (err) => {
if (err) {
console.log(`路由失败,errCode:${err.code}errMsg:${err.message}`)
return;
}
console.info('Invoke replaceUrl succeeded.');
})
})
}
.zIndex(10)
(3)给MydailyPage里面的图片也添加点击事件
Image($r("app.media.quxiao1")).width(25).height(25)
.onClick(()=>{
//路由返回上一页
router.back();
})
这样即可实现跳转效果
(4) 利用弹窗组件给勿扰图片设置点击效果
代码示例:
Image($r("app.media.wurao1")).width(25).height(25)
.onClick(()=>{
AlertDialog.show({
message:'开启消息通知,每天提醒我来打卡',
autoCancel: true,
alignment: DialogAlignment.Center,
gridCount: 5,
primaryButton: {
value: '取消',
fontColor:'black',
action: () => {
console.info('Callback when the first button is clicked')
}
},
secondaryButton: {
value: '确定',
fontColor:'#FB8845',
action: () => {
console.info('Callback when the second button is clicked')
}
}
})
})
运行效果: