鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件

基础组件

Image

声明Image组件并设置图片源

网络权限:ohos.permission.INTERNET

Image(scr: string | PixelMap | Resource)

// 1. string:用于加载网络图片,需要申请网络权限
Image("https://xxx.png")

// 2. PixelMap:像素图
Image(PixelMapObj)

// 3. Resource:加载本地图片
// $r: resouce/base/media/mate60.png
Image($r('app.media.mate60'))
// $rawfile: resouce/rawfile/mate60.png
Image($rawfile('mate60.png'))

添加图片属性

Image("https://xxx.jpg")
    .width('50%')

在模拟器运行需要申请网络权限

src/main/module.json5 中添加权限申请

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

Text

声明Text组件并设置文本内容

Text(content?: string | Resource)
// string
Text("用户名")

// Resource:用于国际化i18n
Text($r('app.string.username_label'))

配置国际化,使用string.json配置标签

image-20240202194734566
// zh_CN
{
  "string": [
    // ...
    {
      "name": "ImageWidth_label",
      "value": "图片宽度"
    }
  ]
}

// en_US
{
  "string": [
    // ...
    {
      "name": "ImageWidth_label",
      "value": "Image Width"
    }
  ]
}
@Entry
@Component
struct Index {
  build() {
    // 内置组件:容器组件(Row、Column)、基础组件(Text)
    Row() {
      Column() {
        Image("https://xxx.jpg")
          .width('50%')
          .borderRadius(5)

        Text($r('app.string.ImageWidth_label'))
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

TextInput

声明TextInput组件

TextInput({placeholder?: Resourcestr, text?: Resourcestr})
  1. placeHoder:输入框无输入时的提示文本
  2. text:输入框当前的文本内容

属性方法和事件

TextInput({text:'当前输入文本'})
    .width(150)	//宽
    .height(30)	//高
    .backgroundColor('#FFF')	//背景色
    .type(InputType.Password)	//输入框类型
    .onChange(value => {
    	// 处理value
	})

修改图片宽度案例:

Image("https://xxx.jpg")
    .width(this.image_width)
    .borderRadius(5)

Text($r('app.string.ImageWidth_label'))
    .fontSize(20)
    .fontWeight(FontWeight.Bold)


TextInput({ placeholder: "请输入图片宽度", text: this.image_width.toFixed(0) })
    .width(150)
    .type(InputType.Number)
    .onChange(value => {
    console.log('image_width', this.image_width.toString())
    console.log('value', value)
    if (value != '') {
        this.image_width = parseInt(value)
    }
})

Button

声明Button组件,label是按钮文字

Button(label?: ResourceStr)

属性与事件

Button('缩小')
    .width(80).fontSize(20)
    .onClick(() => {
    if (this.image_width >= 10) {
        this.image_width -= 10
    }
})

Button('放大')
    .width(80).fontSize(20)
    .onClick(() => {
    if (this.image_width < 300) {
        this.image_width += 10
    }
})

Slider 滑动条

Slider({
    min: 0, // 最小值
    max: 300, // 最大值
    value: this.image_width, // 当前值
    step: 1, // 滑动步长
    style: SliderStyle.OutSet, // 样式: Outset/InSet
    direction: Axis.Horizontal, // 方向: Horizontal/Vertical
    reverse: false // 是否反向滑动
})
    .width('90%')
    .showTips(true)
    .trackThickness(6)
    .onChange(val => {
    this.image_width = val
})

布局组件

属性方法名说明参数
justifyContent设置子元素在主轴方向的对齐格式FlexAlign枚举
alignItems设置子元素在交叉轴方向的对齐格式Row使用VerticalAlign枚举
Column使用HorizontalAlign枚举

主轴方向

Column容器:

Row容器:

交叉轴方向

Column容器:

image-20240204212642772

Row容器:

盒子模型

渲染控制

ForEach

ForEach类似于Vue的v-for,keyGenerator函数类似于:key,是对象的唯一标识。在修改数据后只会去渲染修改的那部分组件,提高效率。

@Entry
@Component
struct Index {
  private names: string[] = ['wmh', 'wmh1024', 'rexhao', 'NDS.wmh']
  build() {
    Column() {
      Row() {
        Text("分数列表")
          .padding(20)
          .fontSize(40)
      }.width('100%')

      ForEach(this.names, (item) => {
        Row() {
          Image("https://xxx.jpg")
            .width(60)
            .margin({
              right: 20,
              left: 20
            })
            .borderRadius(5)
          Column() {
            Text(item)
              .fontSize(25)
            Text("Rating: 14300")
              .fontSize(15)
          }
          .alignItems(HorizontalAlign.Start)
        }
        .width('100%')
        .margin({bottom: 20})
      })
    }
  }
}
image-20240205200331872

if-else

类似于Vue中的v-if

if ( 条件 ) {
    // 内容A
} else {
    // 内容B
}

列表组件

列表(List)是一种复杂容器

特点:

  1. 列表项(ListItem)数量过多超出屏幕后,会自动提供滚动功能
  2. 列表项(ListItem)既可以纵向排列,也可以横向排列

image-20240205201822300

高度权重值,默认为0。把高度按照权重分配。

.layoutWeight(1)
@Entry
@Component
struct Index {
  private names: string[] = ['wmh', 'wmh1024', 'rexhao',
    'wmh1024', 'rexhao', 'NDS.wmh', 'wmh', 'wmh1024', 'rexhao',
    'NDS.wmh', 'wmh1024', 'rexhao', 'NDS.wmh']

  build() {
    Column() {
      Row() {
        Text("分数列表")
          .padding(20)
          .fontSize(40)
      }.width('100%')

      List() {
        ForEach(this.names, (item) => {
          ListItem() {
            Row() {
              Image("https://xxx.jpg")
                .width(60)
                .margin({
                  right: 20,
                  left: 20
                })
                .borderRadius(5)
              Column() {
                Text(item)
                  .fontSize(25)
                Text("Rating: 14300")
                  .fontSize(15)
              }
              .alignItems(HorizontalAlign.Start)
            }
            .width('100%')
            .margin({ bottom: 20 })
          }
        }
        )
      }.width('100%')
      .layoutWeight(1)
    }
  }
}

自定义组件

创建自定义组件

封装并导出组件

@Component
export struct Header {
  private title: string

  build() {
    Row() {
      Text(this.title)
        .padding(20)
        .fontSize(40)
    }.width('100%')
  }
}

使用组件

import { Header } from './Header'

Header({ title: "分数列表" })

构建函数@Builder

  • 定义在struct外部:全局自定义构建函数
  • 定义在struct内部:局部自定义构建函数(不加function、调用需要加this.

构建函数的创建

@Builder function ItemCard(item: string) {
  Row() {
    Image("https://xxx.jpg")
      .width(60)
      .margin({
        right: 20,
        left: 20
      })
      .borderRadius(5)
    Column() {
      Text(item)
        .fontSize(25)
      Text("Rating: 14300")
        .fontSize(15)
    }
    .alignItems(HorizontalAlign.Start)
  }
  .width('100%')
  .margin({ bottom: 20 })
}

构建函数的使用

List() {
    ForEach(this.names, (item: string) => {
        ListItem() {
            ItemCard(item)
        }
    })
}.width('100%').layoutWeight(1)

自定义公共样式

@Styles

自定义公共样式:封装通用样式(属性必须是公共属性

// 定义
@Styles function width_full() {
  .width('100%')
}

// 调用
.width_full()
@Extend()

@Style,用于封装特有属性

@Extend(Text) function DefaultFontSize() {
  .fontSize(15)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/572947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

驱鸟器低成本OTP语音方案选型-wtn6020唯创知音

一、开发背景&#xff1a; 随着农业现代化的不断推进&#xff0c;鸟类对农作物的侵扰问题愈发严重。传统的驱鸟方法&#xff0c;如人工驱赶或使用化学药剂&#xff0c;不仅效率低下&#xff0c;而且可能对环境造成污染。因此&#xff0c;开发一种高效、环保、低成本的驱鸟器成…

考研日常记录(upd 24.4.24)

由于实在太无聊了 &#xff0c; 所以记录以下考研备考日常 &#xff0c; 增加一点成就感 &#xff0c; 获得一点前进动力。 文章目录 2024.4.18 周四课程情况&#xff1a;时间规划&#xff1a; 2024.4.19 周五课程情况&#xff1a;时间规划&#xff1a; 2024.4.20 周六2024.4.2…

RK3588构建ubuntu22.04根文件系统

前言 RK系列的平台提供了buildroot和debian的系统&#xff0c;使用脚本可以直接构建出来&#xff0c;但是没有提供ubuntu的系统&#xff0c;很多厂商只提供一个rootfs.img的固件包&#xff0c;没有将方法开源出来。本文实现了从ubuntu官网开始构建一个ubuntu22.04根文件系统。…

SSTV音频转图片

SSTV工具有很多&#xff0c;这里使用RX-SSTV慢扫描工具 下载安装 RX-SSTV解码软件 下载地址&#xff1a;https://www.qsl.net/on6mu/rxsstv.htm 一直点下一步&#xff0c;安装成功如下图: 虚拟声卡e2eSoft 由于SSTV工具是根据音频传递图片信息&#xff0c;正常解法需要一…

人耳的七个效应

1、掩蔽效应 • 人们在安静环境中能够分辨出轻微的声音&#xff0c;即人耳对这个声音的听域很低&#xff0c;但在嘈杂的环境中轻微的声音就会被淹没掉&#xff0c;这时将轻微的声音增强才能听到。 • 这种在聆听时&#xff0c;一个声音的听阈因另一声音的出现而提高的现象&…

本地修改localhost--手把手

找到本地hosts文件 1、C:\Windows\System32\drivers–快捷键ctrlR,输入drivers 2、点击etc目录&#xff0c;找到hosts文件&#xff0c;右键使用记事本方式打开编辑 3、添加自己想得到的域名【只能在本地使用】 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.…

面试:JVM内存结构

一、Java代码的运行步骤 一段Java代码先会被反编译为Java字节码&#xff0c;当执行java命令时&#xff0c;JVM虚拟机会被创建出来&#xff0c;并会创建一个main主线程来执行主方法。 二、JVM的内存结构有哪些&#xff1f; 1、方法区&#xff1a;&#xff08;线程共享&#xff…

Linux交换空间的创建使用

交换空间&#xff1a; 换出&#xff1a;将内存中不常用&#xff08;冷数据&#xff09;的放去硬盘里 换出&#xff1a;内存要使用这部分数据时&#xff0c;将硬盘的这部分数据放入内存 在内存和硬盘上用来交换数据的空间就是交换空间 创建交换空间的步骤 1.去磁盘上创建一个分…

Linux中的高级IO函数(一)pipe socketpair dup

Linux提供了很多高级的I/O函数。它们并不像Linux基础I/O函数&#xff08;比如open和read&#xff09;那么常用&#xff08;编写内核模块时一般要实现这些I/O函数&#xff09;&#xff0c;但在特定的条件下却表现出优秀的性能。这些函数大致分为三类&#xff1a; 用于创建文件描…

Mongodb语法使用说明(含详细示例)

点击下载《Mongodb语法使用说明&#xff08;含详细示例&#xff09;》 1. 前言 MongoDB是一款高性能、开源、面向文档的NoSQL数据库&#xff0c;它使用类似JSON的BSON格式存储数据&#xff0c;提供了灵活的数据模型和强大的查询功能。本文将详细介绍MongoDB数据库的基本增删改…

CSS常用属性之(列表、表格、鼠标)属性,(如果想知道CSS的列表、表格、鼠标相关的属性知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习CSS的时候&#xff0c;必不可少的就要学习选择器和常见的属性&#xff0c;而本篇文章讲解的是CSS中的列表、表格、背景、鼠标属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 大致了解一下本篇文章…

new String和直接赋值的一些问题

分析1 我们先看以下代码&#xff1a; String str1 "abc"; // 在常量池中String str2 new String("abc"); // 在堆上System.out.println(str1 str2)以上结果的输出是什么&#xff1f; 输出&#xff1a;false 前置知识&#xff1a; 在JVM中&#xff0c…

VForm3的文件上传后的一种文件回显方式

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

(C++) 内类生成智能指针shared_from_this介绍

文章目录 &#x1f601;介绍&#x1f914;类外操作&#x1f605;错误操作&#x1f602;正确操作 &#x1f914;类内操作&#x1f62e;std::enable_shared_from_this<>&#x1f62e;奇异递归模板 CRTP&#xff08;Curiously Recurring Template Pattern&#xff09;&#…

新手如何搭建测试平台?一文1800字从0到1实现【建议收藏】

01、职责 一个健康的测试平台体系&#xff0c;对测试人员的职责分工、协作模式会有不同的要求。 测试平台核心的职责是完成高质量的交付已满足业务需求。测试活动包括单元测试、集成测试、接口测试、性能测试等&#xff0c;都是通过这些测试手段&#xff0c;协同整个测试平台…

JavaEE 初阶篇-深入了解 UDP 通信与 TCP 通信(综合案例:实现 TCP 通信群聊)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 UDP 通信 1.1 DatagramSocket 类 1.2 DatagramPacket 类 1.3 实现 UDP 通信&#xff08;一发一收&#xff09; 1.3.1 客户端的开发 1.3.2 服务端的开发 1.4 实现 …

将Python机器学习模型集成到C++ Qt客户端应用程序中|Qt调用python详解

0、前言 有几个不同的选项可以将你的Python机器学习模型集成到你的C Qt客户端应用程序中。以下是一些可能的解决方案&#xff1a; 创建API&#xff1a; 将你的机器学习模型部署为一个API服务。你可以使用像Flask这样的轻量级Web框架来创建一个简单的HTTP服务。这样&#xff0…

Linux---Socket

网络套接字(socket) 网络通信仅仅是为了让两台主机间传送数据吗&#xff1f;数据是被谁需要的呢&#xff1f;--- 进程&#xff0c;所以网络通信的本质是两个进程间的通信。那么如何找到两台主机上的两个进程呢&#xff1f; 1、通过IP地址确定网络中的唯一一台主机 2、通过po…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0&#xff0c;但集群或服务仍然使用了swap分区&#xff0c;可能原因就是内存没有同步配置 echo “0” > …

C++入门----内联函数auto范围fornullptr指针

1.内联函数 顾名思义&#xff0c;内联函数也是函数的一种&#xff0c;我们在C语言的学习过程里面知道了函数和宏之间的区别和各自的优缺点&#xff1b; 函数的使用需要建立栈帧&#xff0c;宏的使用需要考虑各种符号的优先级问题&#xff0c;很容易出错&#xff0c;因为宏在使…
最新文章