• 快速开发一个鸿蒙的页面


    文章目录

    • 前言
    • 常用组件
    • 快速开启简单的鸿蒙页面
    • 总结
    一、前言

    鸿蒙要想快速上手,那么就需要对基础的组件使用比较熟悉,这里就罗列开发中常见的基础组件的使用。

    只要是写android的,对于这些组件的使用还是能很快上手的,只要多多练习。

    最后呢,这里会通过基础组件的使用,将他们放到页面中,这样有更直观的体验。

    二、常用的基础组件
    1、Image
         //图片组件
          Image($r('app.media.icon'))
          // Image($rawfile('test.png'))  //如果是rawFile 要加后缀名
            .width(50)
            .height(50)
            .borderRadius(10)
            .interpolation(ImageInterpolation.High) //图片的插值效果(去掉锯齿是图片清晰)
            .margin({bottom: 10})
            .onComplete(img =>{
              console.log("图片的宽度:" + img.width)
            })
            .onError(()=>{
               //图片加载报错,走这里
            })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2、Text
          //文本组件
          Text($r('app.string.register'))
            .fontSize(20)  //字体大小
            .lineHeight(30) //行高
            .fontColor('#00f') //字体颜色
            .fontWeight(FontWeight.Medium)//字体粗细
            .margin({bottom: 10})
            .onClick(()=>{
              console.log('点击事件')
            })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3、TextInput
            //文本输入框
            TextInput({placeholder:'请输入用户名'}) //这里头是提示文本
              .width('80%')
              .height(40)
              .backgroundColor('#cdcdcd')
              .margin({left: 10})
    
            //密码输入框
    		TextInput({placeholder: '请输入密码'})
              .width('80%')
              .height(40)
              .backgroundColor('#cdcdcd')
              .type(InputType.Password) //输入文本类型
              .showPasswordIcon(true) //是否显示密码icon
              .margin({bottom: 10})
              .onChange(val=>{
                console.log('输入的值为:' + val)
              })
              .margin({left: 10})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    4、Slider
            //滑动进度条
            Slider({
              value: this.high,
              min: 150,
              max: 190,
              step:1, //这里代表步长
              style: SliderStyle.InSet, //滑动头的是在里面,还是在里面
              direction: Axis.Horizontal, //滑动条的方向。默认是横向
              reverse: false //进度往哪个方向,是否是反向。默认是往右
            }).width('70%')
              .trackThickness(20) //滑轨的粗细
              .showTips(true) //是否显示进度条百分比
              .onChange(val =>{    //获取进度的值
                this.high = val
                console.log('进度长度:' + val)
              })
            Text(this.high.toString()).fontSize(20).fontWeight(FontWeight.Medium)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    5、Select
    		//下拉框组件
            Select([
              { value: '深圳'},
              { value: '广州'},
              { value: '北京'},
              { value: '上海'}
            ]).selected(1)  //默认选择的城市
              .value('请选择城市') //提示文本
              .font({size:20, weight: FontWeight.Medium})
              .onSelect((index,value) =>{
                console.log('选择的城市:' + value)
              })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    6、Checkbox
          Row(){
            Text('兴趣:').fontSize(20)
            //多选框群组
            CheckboxGroup({group: 'checkGroup'})//控制是否全选或者全不选
              .selectedColor('#f00')
              .selectAll(true)  //默认是否全部选中,如果Checkbox 中的select 有值,那么子组件优先级高,这边就不生效
              .onChange((itemName: CheckboxGroupResult) =>{ //被选中的组件名及状态。全部选中的状态是0,全不选是2,有选中是1
                console.log('选中的框是:'+ itemName.name + ' 状态是:'+ itemName.status.toString())
              })
            Text('全选').fontSize(20)
            Checkbox({name: 'checkbox1', group: 'checkGroup'})
              .selectedColor('#f00')//选中的颜色
              .select(false) //这个优先级高于多选框群组的selectAll
              .onChange((value: Boolean) =>{
                console.log('checkbox1 是否选中:' + value)
              })
            Text('看书').fontSize(20)
            Checkbox({name: 'checkbox2', group: 'checkGroup'})
              .selectedColor('#f00')//选中的颜色
              .select(false)
              .onChange((value: Boolean) =>{
                console.log('checkbox2 是否选中:' + value)
              })
            Text('跑步').fontSize(20)
            Checkbox({name: 'checkbox3', group: 'checkGroup'})
              .selectedColor('#f00')//选中的颜色
              .select(false)
              .onChange((value: Boolean) =>{
                console.log('checkbox3 是否选中:' + value)
              })
            Text('钓鱼').fontSize(20)
          }.width('100%')
          .margin({bottom:10})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    7、Radio
          Row(){
            Text('性别:').fontSize(20)
            //单选框组件 (记得写多组,不然点击看不出效果)
            Radio({value: '男', group: 'sex'})
              .height(20)
              .width(20)
              .checked(true)
              .onChange((isChecked: Boolean)=>{
                if (isChecked) {
                  console.log('男生 是否选中:' + isChecked)
                }
              })
    
            Text('男').fontSize(20)
    
            Radio({value: '女', group: 'sex'})
              .height(20)
              .width(20)
              .checked(true)
              .onChange((isChecked: Boolean)=>{
                if (isChecked) {
                  console.log('女生 是否选中:' + isChecked)
                }
              })
            Text('女').fontSize(20)
          }.width('100%')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    三、布局
    1、Column
         //垂直方向布局容器
          Column({space:20}){ //组件间的间距
            Text('组件一').fontSize(20).fontColor('#00f').lineHeight(FontWeight.Medium)
            Text('组件二').fontSize(20).fontColor('#00f').lineHeight(FontWeight.Medium)
          }.backgroundColor('#f00')
            .width('100%')
            .height(100)
            .justifyContent(FlexAlign.Center)//这里是column里面组件  主轴的布局方式。有居中,有放在开始,有放在结束等。
            .alignItems(HorizontalAlign.Start) //这里是column里面组件 交叉轴的布局方式。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2、Row
         //水平方向布局容器
          Row(){
            Text('组件一').fontSize(20).fontColor('#00f').lineHeight(FontWeight.Medium)
            Text('组件二').fontSize(20).fontColor('#00f').lineHeight(FontWeight.Medium)
          }.backgroundColor('#0f0')
          .width('100%')
          .height(50)
          .justifyContent(FlexAlign.Center)//主轴的布局方式,这是是居中
          .alignItems(VerticalAlign.Top) //交叉轴的布局方式,这里是放在顶部
          Text('组件三').fontSize(20).fontColor('#00f').lineHeight(FontWeight.Medium)
            .margin(20)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    3、Stack
    //堆叠布局,后面的组件会覆盖在前面的组件上面
     Stack(){
            Image($r('app.media.icon'))
              .width(50)
              .height(50)
    
            Text('hello world')//这个控件覆盖在image上面
          }
          .width('90%')
          .border({radius: 20})
          .backgroundColor('#f00')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    四、快速开启简单的鸿蒙页面

    这是根据上面提到的组件和布局整理出来的,一个页面。下面是效果图。

    在这里插入图片描述

    最后呢,将我整理的这些组件都放到这个项目中,后面有新增,也会一并上传。开发中,某些api忘记了,可以重新拿出来看看。

    以上代码地址:https://github.com/shenshizhong/ViewUseDemo

    总结

    1、罗列鸿蒙基础组件的使用
    2、几个重要的布局组件的使用
    3、快速撸一个简单的鸿蒙页面

    如果对你有一点点帮助,那是值得高兴的事情。:)
    我的csdn:http://blog.csdn.net/shenshizhong
    我的简书:http://www.jianshu.com/u/345daf0211ad

  • 相关阅读:
    APP稳定性测试工具:Monkey
    表达式得到期望结果的组成种数问题
    JAVA计算机毕业设计准妈妈孕期交流平台Mybatis+系统+数据库+调试部署
    【使用分类的注意细节 Objective-C语言】
    Windows ffmpeg生成安卓全平台so
    观视界Grandvision EDI项目案例
    造个Python轮子,实现根据Excel生成Model和数据导入脚本
    软考高级系统架构设计师系列之:快速掌握数据库系统核心知识点
    【Rust】操作日期与时间
    vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计
  • 原文地址:https://blog.csdn.net/shenshizhong/article/details/136394068