从零开始学Hm(二)

本文详细介绍了HarmonyOS中的各种UI组件,如image组件的网络图片、PixelMap和Resource加载方式,以及文本、按钮、滑动条、进度条等的使用。还涵盖了页面布局、循环渲染、条件判断和列表组件的详细配置,以及公共部分的抽取和样式管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组件

通用属性

.width(100)

.height(100)

.bordrRadius(10)//边框圆角

image

声明inmage组件并设置图片源 三种方式

1.string 加载网络图片,需要申请网络访问权限 ohos.permission.INTERNET

权限

在官方文档 安全中 在model.json5添加权限,name必填,其余参考文档选择用户授权或者系统授权,此处internet是系统授权

在model下添加requestPermissions

 "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }

    ],
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes":

image(‘https://xxx.png’)

2.PixelMap格式,加载像素图,需要传递一个像素图对象

image(pixelMapObject)

3.Resource格式 加载本地图片

Image($r(‘app.media.mate60’)) 加载media路径下的图片 不需要写后缀

Image($rawfile(‘mate60.png’)) 需要加后缀 读rawfile文件夹下的图片

属性

.interpolation(ImageInterpolation.Hight)图片插值 参数是枚举类型 有三种 高中低 消除图片放大之后的锯齿

文本

string格式 直接写文本内容

resource格式 读取本地资源,需要在 en_US zh_CN base 目录下都加上

文本输入框

TextInput

placeHoder:输入框没东西的时候提示文本

text:当前文本内容

属性

.type()密码

按钮

button(‘点我’)

嵌套其他组件 button(){Image()

}

属性

.type(normal 方形,Capsule 默认的胶囊,circle圆形)

Slider滑动条

min 最小值

max 最大值

value 默认值 当前值

step 步长

style:SliderStyle.OutSet 滑块位置 在滑动条外(里)

direction Axis.Horizontal 横向滑动或者纵向滑动

reverse: false 是否反向滑动 最小值最大值切换位置

属性

.showTips(true) 显示百分比

进度条
 Progress({
          value:this.finishTask,//当前
          total:this.totalTask,//总进度
          type:ProgressType.Ring//样式 枚举类型
        })
堆叠容器

Stack 后面覆盖前面

Stack(){
第一个
第二个
}
单选框
Checkbox()
              .select(item.finished)//完成

页面布局

justifyContent 主轴对齐格式 FlexAlign枚举对象

alignItems 交叉轴对齐格式 row容器用VerticalAlign枚举

​ column容器使用HorizontalAlign枚举对象

column容器 列

主轴上下 交叉轴左右

HorizontalAlign 左中右
row容器 行
VerticalAlign 上中下

交叉轴上下 主轴左右

FlexAlign

start 置顶 center 居中 end置底 spacebetween 中间平分

循环渲染

Foreach{

数组名(item:any)=>{ 循环体}

}

ifelse 判断

页表布局 list

一定要设置高度 有了高度才可以上下拖动,设置layoutWeight属性可以占有屏幕高度

1.数量过多超出屏幕之后,会自动提供滚动功能

2.纵向横向排列都可以

ListItem(){ 列表项内容只能包含一个根组件}

list属性

.listDirection(Axis.Vertical) 列表方向,默认纵向 (垂直)

(Horizontal)水平方向

.layoutWeight(1) 默认是0,当你是0我是1时,除了你的全是我的,都是1时大家平分

 List({
        space:8
      }){

        ForEach(
          this.goods,
          (good:good)=>{

            ListItem(){

              Row(){
                Image(good.img)
                  .width(100)

                Column({space:4}){
                  if(good.discount){
                    Text(good.name)
                      .fontSize(20)
                      .fontWeight(FontWeight.Bold)

                    Text('原价:¥'+good.price.toString())
                      .fontColor('#ff797777')
                      .fontSize(12)
                      .margin({top:6})
                      .decoration({type:TextDecorationType.LineThrough})
                    Text('折扣价:¥'+(good.price-good.discount).toString())
                      .fontColor('#F36')
                      .fontSize(18)
                      .margin({top:6})
                    Text('补贴:¥'+good.discount.toString())
                      .fontColor('#F36')
                      .fontSize(18)
                      .margin({top:6})

                  }else {
                    Text(good.name)
                      .fontSize(20)
                      .fontWeight(FontWeight.Bold)

                    Text(good.price.toString())
                      .fontColor('#F36')
                      .fontSize(18)
                      .margin({top:6})
                  }

                }.justifyContent(FlexAlign.Start)
                .margin({left:20})

              }.width('100%')
              .margin({left:20})
              .backgroundColor('#ffeaeaea')
            }
          }

        )
      }.width('100%')
      .layoutWeight(1)
//集合居中样式
.alignListItem(ListItemAlign.Center)
引用 抽取

抽取出公共部分如头部 export 用import引入

全局构建函数

写在装饰器上方 需要加function

//全局自定义构建函数
@Builder function GoodCard(good: good) {
  Row() {
    Image(good.img)
      .width(80)

    Column({ space: 4 }) {
      if (good.discount) {
        Text(good.name)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)

        Text('原价:¥' + good.price.toString())
          .fontColor('#ff797777')
          .fontSize(12)
          .margin({ top: 3 })
          .decoration({ type: TextDecorationType.LineThrough })
        Text('折扣价:¥' + (good.price - good.discount).toString())
          .fontColor('#F36')
          .fontSize(18)
          .margin({ top: 3 })
        Text('补贴:¥' + good.discount.toString())
          .fontColor('#F36')
          .fontSize(18)
          .margin({ top: 3 })

      } else {
        Text(good.name)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)

        Text(good.price.toString())
          .fontColor('#F36')
          .fontSize(18)
          .margin({ top: 6 })
      }

    }.justifyContent(FlexAlign.Start)
    .margin({ left: 10 })

  }.width('90%')
  .backgroundColor('#FFF')
  .borderRadius(10)
  .margin({ left: 15 })
}
局部构建函数

只能自己组件内使用,代码相同去掉function引用时需要加this

抽取公共样式
// 全局样式
@Styles function allStyle(){
  .backgroundColor('#efefef')
  .width('100%')
  .height('100%')
  .padding(20)

}
直接.方法名引用,局部不加function
抽取非公共样式

不能写在组件内 ,只能写在全局位置

@Extend(Text) function 方法名(){

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值