鸿蒙开发学习——基本组件

文章目录

    • 引言
    • 正文
      • Image组件
        • 设置加载网络图片
        • 图片属性设置
      • Text组件
        • 设置文本显示内容
        • text属性设置
      • TextInput输入文本
        • TextInput Controller
        • 获取输入文本
      • Button按钮

引言

  • 最近在学习鸿蒙系统开发,然后对着文档看还是有很多问题,这里结合官方给的demo进行学习,结合代码逐个介绍相关组件。

正文

  • 整个项目跑起来如下图:

在这里插入图片描述

  • 对应界面组成的组件如下图,下面结合代码逐个进行介绍。
    在这里插入图片描述

Image组件

  • 这个组件显示渲染图片,在登陆界面中是负责显示图标。对应代码如下
    • 这里是使用了resource数据加载图像,是直接调用项目中的资源文件。需要将图片添加到resources的media/rawfile目录下方,见图在这里插入图片描述
 Image($r('app.media.logo')).width($r('app.float.logo_image_size')).height($r('app.float.logo_image_size')).margin({ top: $r('app.float.logo_margin_top'), bottom: $r('app.float.logo_margin_bottom') })
  • images介绍
    • 加载图片的方式有三种
      • 使用string字符串输入图片的网络连接,加载网络图片
        • Image('https://xxxxx')
      • 使用resource数据,加载保存在本地的图片
        • Image(pixelMapObject)
      • 使用pixelMap数据加载图像
        • Image($r('a[[.media.logo'))
          在这里插入图片描述
设置加载网络图片
  • 这里使用string指定需要加载的网络图片的连接,加载网络图片

    • 添加网络权限:需要在module.json5中添加网络访问权限在这里插入图片描述

    • 添加网络访问的地址:使用字符串的形式,添加网络访问的地址,需要指明是https的格式在这里插入图片描述

  • 最终的执行效果如下
    在这里插入图片描述

图片属性设置
  • 这里是设置图片的属性,相关属性是写在了对应的json文件中。
    在这里插入图片描述

  • 这里要将网络图片完整显示,使用ObjectFit属性进行调整,保证图片的完整显示,具体具体效果如下,分别有几种参数设计,具体如下

    • contain:保证宽高比,进行缩小和放大,使图片完整显示在边界里面在这里插入图片描述

    • cover:保证长宽比,图片两边大于等于显示边界在这里插入图片描述

    • auto:自适应显示在这里插入图片描述

    • fill:不保持长宽比,图片充满显示边界在这里插入图片描述

    • scaledown:保证长宽比,图片缩小或者保持不变在这里插入图片描述

    • None:保持原有尺寸显示在这里插入图片描述

Text组件

  • 就是文本组件,用来显示文本信息,可常规的安卓编程相同,可以使用string,直接设置对应的文本信息,或者使用resource,在对应的资源文件中设置对应的文本信息,具体如下
设置文本显示内容
  • string直接设置
    在这里插入图片描述

  • 使用resource资源文件进行设置在这里插入图片描述

    • 对应文本保存的路径是在,resource下的json文件在这里插入图片描述
text属性设置
  • 通过text有很多属性,可以指定对应的文字,具体如下
    • fontsize:设置文字大小
    • fontcolor:设置文字颜色
    • fontweight:设置文字粗细
  • 每一种属性设置的方式也很灵活,主要有两种
    • 直接输入对应的整型数值0x182431,或者string类型
    • 使用resource文件进行指定,写在对应的json文件中

在这里插入图片描述
#

TextInput输入文本

  • 下述为demo中登陆界面具体的代码和效果,主要是获取用户的账号和密码。对应代码解释如下
    • placeholder是输入账号的提示符,账号那里会提示输入账号,密码那里会提示输入密码

    • maxlength:允许输入的最大长度

    • type:指定的输入类型

    • inputStyle:显示对应的输入框的样式在这里插入图片描述

    • onchange:绑定对输入框的处理事件

在这里插入图片描述

TextInput Controller
  • 使用TextController控制TextInput中的相关操作,比如说光标变化,下述是官方给出的参考代码
@Entry
@Component
struct TextInputDemo {controller: TextInputController = new TextInputController()build() {Column() {TextInput({ controller: this.controller })Button('设置光标位置').onClick(() => {this.controller.caretPosition(2)})}.height('100%').backgroundColor(0xE6F2FD)}
}
  • 这里在原来的代码上进行修改,点击登陆时,如果没有输入,将光标移动到对应的位置中
  login(): void {if (this.account === '') {prompt.showToast({message: $r('app.string.account_input_empty_tips')}),this.controller.caretPosition(0) // 输入为空,将光标放到输入的账号上面}else if(this.password === ''){prompt.showToast({message:$r('app.string.password_input_empty_tips')}),this.controller_password.caretPosition(0)
  • 这个函数需要基于当前的文本输入中是有输入的,如果没空,并不能跳进来,所以没啥效果。
获取输入文本
  • 我们可以给TextInput设置onChange事件,输入文本发生变化时触发回调,下面示例代码中的value为实时获取用户输入的文本信息。
  • 具体使用代码如下
@Entry
@Component
struct TextInputDemo {@State text: string = ''build() {Column() {TextInput({ placeholder: '请输入账号' }).caretColor(Color.Blue).onChange((value: string) => {this.text = value})Text(this.text)}.alignItems(HorizontalAlign.Center).padding(12).backgroundColor(0xE6F2FD)}
}

Button按钮

  • 整个界面包含了七个按钮,构成了这个页面的逻辑,但是并没有将所有的按钮都绑定对应的操作逻辑,响应用户的点击操作。具体如下

在这里插入图片描述

  • 登录按钮的样式和具体代码如下

在这里插入图片描述

Button($r('app.string.login'), { type: ButtonType.Capsule })  // type指定用户的按钮类型,还有其他两种样式normal,circle.width(CommonConstants.BUTTON_WIDTH).height($r('app.float.login_button_height')).fontSize($r('app.float.normal_text_size')).fontWeight(FontWeight.Medium).backgroundColor($r('app.color.login_button_color')).margin({ top: $r('app.float.login_button_margin_top'), bottom: $r('app.float.login_button_margin_bottom') }).onClick(() => {this.login();}) // 响应用户的点击事件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机掉线自动重连(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机掉线自动重连(C) Baumer工业相机Baumer工业相机的掉线自动重连的技术背景通过PnP事件函数检查Baumer工业相机是否掉线在NEOAPI SDK里实现相机掉线重连方法:工业相机掉线重连测试演示图 …

魔改版小市值策略

策略思路 最近几年,小市值策略一直都收益不错(当然,不包含17年和18年)。小市值因子对收益的影响是很大的。特别是行情不好的时候,大家都忙着炒作热点,那么这时候符合题材的小市值更加符合炒作标准了。 为…

《使用ThinkPHP6开发项目》 - ThinkPHP6创建菜单模块

#CSDN 年度征文|回顾 2023,赢专属铭牌等定制奖品# 一、创建菜单模块 1、创建系统菜单表 CREATE TABLE menu (id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 菜单ID,menu_name varchar(32) NOT NULL DEFAULT COMMENT 菜单名称,path varchar(2…

技术学习|CDA level I 描述性统计分析(常用的数据分布)

推断性统计分析方法的基础理论——常用的分布(两点分布、二项分布、正态分布[含标准正态分布]、χ2分布、t分布、F分布。 随机试验:结果不确定的实验,例如,进行一次抛硬币实验,结果是不确定的。对于随机试验的结果&am…

EM算法公式详细推导

EM算法是什么? EM算法是一种迭代算法,用于含隐变量概率模型参数的极大似然估计,或极大后验概率估计。EM算法由两步组成:E步,求期望;M步:求极大。EM算法的优点是简单性和普适性。 符号说明&…

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点,面对一个新的需求,我们该如何开始呢?这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为,只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…

Postman版IDEA插件!免费!

Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…

CMU15-445-Spring-2023-Project #0 - C++ Primer

前置任务。 Task #1 - Copy-On-Write Trie Copy-on-write (COW) Trie 在进行修改时,不会立即复制整个数据结构。相反,它会在需要修改的节点被多个引用的时候才进行复制。当要对某个节点进行写操作(添加子节点或者继续向下insert&#xff09…

花了一小时,拿python手搓了一个考研背单词软件

听说没有好用的电脑端背单词软件?只好麻烦一下,花了一小时,拿python手搓了一个考研背单词软件。 代码已经开源在我的github上,欢迎大家STAR! 其中,数据是存放在sqlite中,形近词跳转是根据jaro …

OpenHarmony源码转换器—多线程特性转换

本文讨论了如何将多线程的 Java 代码转换为 OpenHarmony ArkTS 代码​ 一、简介 Java 内存共享模型 以下示例伪代码和示意图展示了如何使用内存共享模型解决生产者消费者问题。 生产者消费者与共享内存间交互示意图 为了避免不同生产者或消费者同时访问一块共享内存的容器时…

【小程序开发】解决 HBuilder X “本项目类型无法运行到小程序模拟器”

今天遇到一个奇怪的问题,从git导入的微信小程序项目准备运行到小程序模拟器时菜单没有展示出模拟器工具列表,而是展示了这么一个子菜单“本项目类型无法运行到小程序模拟器,点击看详情”。如下图: 点击是跳转到一个web链接。 我通…

【零基础入门TypeScript】判断条件和循环

目录 定环 无限循环 示例:while 与 do..while 中断语句 句法 流程图 例子 继续语句 句法 流程图 例子 输出 无限循环 语法:使用 for 循环的无限循环 示例:使用 for 循环的无限循环 语法:使用 while 循环进行无限循…