首页 > 其他分享 >鸿蒙案例-欢迎页面的实现

鸿蒙案例-欢迎页面的实现

时间:2024-06-22 12:31:51浏览次数:22  
标签:鸿蒙 width color Text app 案例 opacityWhiteText 弹窗 页面

前言

‘案例来源于b站课程’


实现过程

1.首页面主要有三部分<1>中央slogan;<2>logo;<3>文字描述

设置中央slogan要使用layoutWeight(1) 实现布局全中;

     Row(){
        Image($r('app.media.home_slogan')).width(260)
      }
      .layoutWeight(1)

logo即图片设置好图片的大小,实现布局美观

  Image($r('app.media.home_logo')).width(150)

文字描述时设置好文字大小,颜色,透明度

 Row(){
        Text('黑马健康支持').opacityWhiteText(0.8,12)
        Text('IPv6')
          .opacityWhiteText(0.8)
          .border({style:BorderStyle.Solid,width:1,color:Color.White,radius:15}) //radius弧度
          .padding({left:5,right:5})
        Text('网络').opacityWhiteText(0.8,12)
      }
      Text(`'减更多'指黑马健康App希望通过软件工具的形式,帮助更多用户实现身材管理`)
        .opacityWhiteText(0.6)
      Text('浙ICP备0000000号-36D')
        .opacityWhiteText(0.4)
        .margin({bottom:35}) //外边距
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.welcome_page_background'))
  }

2.弹窗主要有三部分<1>标题;<2>内容;<3>按钮

(注意预览界面时需要用到@Preview进行预览)

 Text($r('app.string.user_privacy_title'))
        .fontSize(20)
        .fontWeight(CommonConstants.FONT_WEIGHT_700)
 Text($r('app.string.user_privacy_content'))
   Button($r('app.string.agree_label'))
        .width(150)
        .backgroundColor($r('app.color.primary_color'))
        .onClick(()=>{
          this.confirm()
          this.controller.close() //关闭弹窗
        })
      Button($r('app.string.refuse_label'))
        .width(150)
        .backgroundColor($r('app.color.lightest_primary_color'))
        .fontColor($r('app.color.light_gray'))
        .onClick(()=>{
          this.cancel()
          this.controller.close() //关闭弹窗
        })
    }
    .width('100%')
    .padding(10)
  }

3.页面加载时弹窗

加载首选项,然后进行判断是否同意,同意,跳转首页,不同意则弹窗

async aboutToAppear(){  
    let isAgree = await preferenceUtil.getPreferenceValue(PREF_KEY,false)
   if(isAgree){
     this.jumpToIndex()
   }else {
     this.controller.open()

   }
  }

跳到首页时可以设置延迟

jumpToIndex(){ 
    setTimeout(()=>{ 
      router.replaceUrl({
        url:'pages/Index'
      })
    },1000) 
  }

4.退出App

exitApp(){
    this.context.terminateSelf() 
  }

代码实现:

1.欢迎界面的实现


import common from '@ohos.app.ability.common'
import preferences from '@ohos.data.preferences'
import router from '@ohos.router'
import preferenceUtil from '../common/utils/PreferenceUtil'
import UserPrivacyDialog from '../view/welcome/UserPrivacyDialog'
@Extend(Text) function opacityWhiteText(opacity:number,fontSize:number = 10){  //Extend继承Text
  .fontSize(fontSize)
  .opacity(opacity) //opacity透明度
  .fontColor(Color.White)
}
const PREF_KEY = 'userPrivacyKey'
@Entry
@Component
struct WelcomePage {
  context= getContext(this) as common.UIAbilityContext
  controller: CustomDialogController= new CustomDialogController({
    builder: UserPrivacyDialog({
      confirm:()=>this.onConfirm(),
      cancel:()=>this.exitApp()
    })
  })

 async aboutToAppear(){  //页面一加载就弹窗
    //1.加载首选项
    let isAgree = await preferenceUtil.getPreferenceValue(PREF_KEY,false)
    //2.判断是否同意
   if(isAgree){
     //2.1.同意,跳转首页
     this.jumpToIndex()
   }else {
     //2.2.不同意,弹窗
     this.controller.open()

   }
  }

  jumpToIndex(){ //跳到首页
    setTimeout(()=>{ //延迟
      router.replaceUrl({ //加载一次就行无需圧栈
        url:'pages/Index'
      })
    },1000) //1000毫秒即1秒后再跳转
  }

  onConfirm(){
    //1.保存首选项
    preferenceUtil.putPreferenceValue(PREF_KEY,true)
    //2.跳转到首页
    this.jumpToIndex()
  }

  exitApp(){
    //退出App
    this.context.terminateSelf() //终结
  }

  build() {
    Column({space:10}) {  //Column沿垂直方向布局的容器。
      //1.中央slogan
      Row(){
        Image($r('app.media.home_slogan')).width(260)
      }
      .layoutWeight(1) //布局全中
      //2.logo
      Image($r('app.media.home_logo')).width(150)
      //3.文字描述
      Row(){
        Text('黑马健康支持').opacityWhiteText(0.8,12)
        Text('IPv6')
          .opacityWhiteText(0.8)
          .border({style:BorderStyle.Solid,width:1,color:Color.White,radius:15}) //radius弧度
          .padding({left:5,right:5})
        Text('网络').opacityWhiteText(0.8,12)
      }
      Text(`'减更多'指黑马健康App希望通过软件工具的形式,帮助更多用户实现身材管理`)
        .opacityWhiteText(0.6)
      Text('浙ICP备0000000号-36D')
        .opacityWhiteText(0.4)
        .margin({bottom:35}) //外边距
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.welcome_page_background'))
  }
}

2.弹窗


import { CommonConstants } from '../../common/constants/CommonConstants'
@Preview //可预览

@CustomDialog //自定义弹窗装饰器
export default struct UserPrivacyDialog {
  controller:CustomDialogController //自定义弹窗控制器
  confirm:()=>void //定义两个无返回值的函数
  cancel:()=>void

  build() {
    Column({space:CommonConstants.SPACE_10}){
      //1.标题
      Text($r('app.string.user_privacy_title'))
        .fontSize(20)
        .fontWeight(CommonConstants.FONT_WEIGHT_700)
      //2.内容
      Text($r('app.string.user_privacy_content'))
      //3.按钮
      Button($r('app.string.agree_label'))
        .width(150)
        .backgroundColor($r('app.color.primary_color'))
        .onClick(()=>{
          this.confirm()
          this.controller.close() //关闭弹窗
        })
      Button($r('app.string.refuse_label'))
        .width(150)
        .backgroundColor($r('app.color.lightest_primary_color'))
        .fontColor($r('app.color.light_gray'))
        .onClick(()=>{
          this.cancel()
          this.controller.close() //关闭弹窗
        })
    }
    .width('100%')
    .padding(10)
  }
}

页面效果

总结

     用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。

标签:鸿蒙,width,color,Text,app,案例,opacityWhiteText,弹窗,页面
From: https://blog.csdn.net/weixin_67913109/article/details/139767102

相关文章

  • Swagger使用案例
    1、新建SpringBoot项目,导入swagger依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId&g......
  • Silence 主题暗黑模式根据浏览器配置,以及切换页面闪白屏的问题处理
    最近使用Silencev3.0.0-rc2主题遇到两个偏好问题(感谢作者提供了这么好用的主题),记录下处理的过程。暗黑/亮色模式跟随浏览器的主题切换由于主题当前支持的配置项auto是根据时间定的,而不是根据浏览器的配置来的,而我个人偏向于跟随浏览器的配置来自动设置,于是用js先判断浏......
  • Java:创建一个SpringBoot架构,并尝试访问一个简单的HTML页面:Hello HTML.创建SpringBoot
    下面我们开始教程:第一步:创建Maven工程我这里是Maven工程:之后再在pom文件导入SpringBoot坐标:注:我的平台版本是2020.1,有可能跟大家的不太一样,但创建项目大体类似。Maven即可。直接SpringBoot也可。Next下一步:取名项目名称:InfomanageNext下一步:Fish:然后进入pom.xml......
  • 【每日一练】python入门级小案例
    题目数字从小到大排序 用户随意分别输入三个数,利用列表的排序方法sort()从小到大排序。代码: 输出结果: 代码分析:先创建三个变量x,y,z,用input()输入获取值;再创建一个列表,元素分别是x,y,z三个变量;利用列表的排序方法sort(),对列表从小到大排序;用for循环遍......
  • 消息队列kafka中间件详解:案例解析(第10天)
    系列文章目录1-消息队列(熟悉)2-Kafka的基本介绍(掌握架构,其他了解)3-Kafka的相关使用(掌握kafka常用shell命令)4-Kafka的PythonAPI的操作(熟悉)文章目录系列文章目录前言一、消息队列(熟悉)1、产生背景2、消息队列介绍2.1常见的消息队列产品2.2应用场景2.3消息队列中两......
  • 算力AI大模型在智能电网行业中的应用及案例分享
    大模型在智能电网行业中的应用广泛且重要,以下是几个主要方面的应用:智能电网安全监测:AI大模型通过监控电网运行状态,实现对电网安全的实时预警与监测。一旦出现异常情况,AI大模型可以及时作出响应,并提供解决方案,确保电网运行的安全稳定。智能电网数据处理:智能电网产生海......
  • MySQL bit类型增加索引后查询结果不正确案例浅析
    昨天同事遇到的一个案例,这里简单描述一下:一个表里面有一个bit类型的字段,同事在优化相关SQL的过程中,给这个表的bit类型的字段新增了一个索引,然后测试验证时,居然发现SQL语句执行结果跟不加索引不一样。加了索引后,SQL语句没有查询出一条记录,删除索引后,SQL语句就能查询出几十条记录。......
  • saas产品运营案例 | 联盟营销计划如何帮助企业提高销售额?
    在当今数字化时代,SaaS(软件即服务)产品已成为企业提高效率、降低成本的重要工具。然而,面对激烈的市场竞争,如何有效地推广SaaS产品、提高销售额,成为许多企业面临的挑战。林叔将以ClickFunnels为例,探讨联盟营销计划如何帮助企业实现销售目标。ClickFunnels是一个着陆页和漏斗生......
  • OCS2_mobile_manipulator案例详解
    1.启动共启动3个节点mobile_manipulator_mpc_node//mpc问题构建,计算mobile_manipulator_dummy_mrt_node//仿真,承接MPC的输出,发布Observation,对于仿真来讲,状态发布也是反馈mobile_manipulator_target//交互发布target2.MobileManipulatorMpcNode.cppMobileManipula......
  • 企业为什么要进行数据资产管理工作:价值与案例剖析
    在数字化浪潮席卷全球的今天,数据已经成为企业不可或缺的重要资产。数据资产管理,作为确保数据资产价值得以最大化利用的关键环节,正逐渐成为企业战略规划中的核心议题。本文将深入剖析企业进行数据资产管理工作的必要性,并结合实践案例,展示数据资产管理在企业实际运营中的价值。......