HarmonyOS应用开发入门笔记:布局原理+常见交互组件实战
一.文本显示
Text是文本组件,用于展示用户视图,如显示文章的文字内容。
创建文本 Text可通过以下两种方式来创建:
string字符串 :Text('我是一段文本')
引用Resource资源: 资源引用类型可以通过$r创建Resource类型对象,文件位置为/resources/base/element/string.json,例如
{
"string": [
{
"name": "module_desc",
"value": "模块描述"
}
]
}
// 请将$r('app.string.module_desc')替换为实际资源文件,在本示例中该资源文件的value值为"模块描述"
Text($r('app.string.module_desc'))
.baselineOffset(0)
.fontSize(30)
.border({ width: 1 })
.padding(10)
.width(300)
例如:

二.按钮Button
简单创建
Button('我是按钮')
常见样式调整
简单交互


这是层叠加按钮的例子还有文本显示
单选框 (Radio)
创建单选框
Radio(options: {value: string, group: string})
怎么给单选框加点击后的交互逻辑——比如选完某个选项之后,怎么拿到用户选了哪个,做后续的处理(比如跳页、校验之类)
Radio支持设置选中状态和非选中状态的样式。
Radio({ value: 'Radio1', group: 'radioGroup' })
.checked(false)
Radio({ value: 'Radio2', group: 'radioGroup' })
.checked(true)
场景示例


我拿一个来做例子解释:
Radio({ value: '本科', group: 'education' })
value: '本科':这个按钮代表的选项就是「本科」,你选它,最后得到的结果就是“我选了本科” • group: 'education':给这个按钮贴个标签「我属于学历这一组」,只要是贴了这个标签的按钮,都只能选一个,选我就不能选别人了,然后再调大小 高度 最后写
.checked(true) 页面一打开,这个按钮默认就是选中的

切换按钮 (Toggle)
创建切换按钮
Toggle(options: { type: ToggleType, isOn?: boolean })
其中,ToggleType为开关类型,包括Button、Checkbox和Switch,isOn为切换按钮的状态。
接口调用有以下两种形式:
创建不包含子组件的Toggle。
当ToggleType为Checkbox或者Switch时,用于创建不包含子组件的Toggle:
Toggle({ type: ToggleType.Checkbox, isOn: false }).id('toggle1') // 请开发者替换为实际的id
Toggle({ type: ToggleType.Checkbox, isOn: true }).id('toggle2') // 请开发者替换为实际的id

Toggle({ type: ToggleType.Switch, isOn: false }).id('toggle3') // 请开发者替换为实际的id
Toggle({ type: ToggleType.Switch, isOn: true }).id('toggle4') // 请开发者替换为实际的id

除支持通用事件外,Toggle还用于选中和取消选中后触发某些操作,可以绑定onChange事件来响应操作后的自定义行为。
Toggle({ type: ToggleType.Switch, isOn: false })
.onChange((isOn: boolean) => {
if(isOn) {
// 需要执行的操作
// ···
}
})
场景示例



这是一个演示两种Toggle组件(复选框、开关)的页面,当你切换开关时,下方文字会同步更新显示开关的状态。
@State isOpen:boolean = true:用状态变量保存开关的状态,初始默认是打开(true),状态变化后页面会自动刷新。
第一个Toggle:复选框 默认关闭状态
第二个Toggle:开关 创建一个开关样式的Toggle:
• type:ToggleType.Switch:指定类型为滑动开关
• isOn:this.isOpen:开关状态和我们定义的isOpen状态变量绑定
• 设置了尺寸,选中状态的颜色为红色
• onChange是状态切换的回调:当用户点击切换开关,就把isOpen取反(打开变关闭、关闭变打开),状态改变后页面自动刷新。
根据当前isOpen的值显示对应文字:打开就展示"开关已打开",关闭就展示"开关已关闭",状态切换后文字会同步变化。

使用纵向布局容器Column排列内容,首先添加了一行提示文本,设置文字大小为20。
创建了开关类型的Toggle组件:
• type:ToggleType.Switch:指定组件为滑动开关样式
• isOn:true:设置开关默认是打开状态
• 配置了开关的宽高
• 核心是.enabled(false):把开关设置为禁用状态,此时用户无法点击切换开关,对应右侧预览效果中灰化不可点击的打开态开关。


build()是构建UI的方法,使用纵向布局Column排列内容
• 添加文本后,根据状态isOpen动态设置文字颜色:isOpen为真则文字变红,否则变绿
创建开关类型的Toggle组件,开关的选中状态和isOpen状态绑定
• 通过onChange监听开关切换:每次切换时,将isOpen取反,状态改变后会自动触发文字颜色刷新。

- 文本内容根据
isShow动态改变:开启则显示"开关已开启",关闭显示"开关已关闭";同时文字颜色同步变化,开启为红色,关闭为绿色。 - 使用横向布局
Row排列文字和开关,元素间距20vp - 创建一个开关样式的Toggle组件:开关状态和
isShow状态绑定,选中后的开启颜色设置为红色,和标题文字颜色保持一致 - 通过
onChange监听切换:用户切换开关后,直接把新的开关值赋值给状态isShow,触发页面UI刷新。
三.点击事件onClick.@state和按钮结合
在ArkTS里,@State就是用来给会变的组件数据做标记的装饰器:
• 被它标记的变量就叫「状态变量」
• 只要变量的值发生改变,ArkUI会自动刷新对应页面区域,不用你手动修改页面内容,是鸿蒙里最基础的状态管理方式。
onClick比如说设置一个开关按钮或者文本是点击一下就有开关和关闭
什么是点击事件onClick?
onClick是组件的点击回调方法,你只要给它传一个函数,用户点击这个组件的时候,就会自动执行你写好的逻辑代码,一般用来处理用户交互(比如点按钮切换状态、跳转页面等)。
场景示例



整体代码运行逻辑梳理
1. 页面刚打开的时候,isOpen默认是false,页面显示**「开关已关闭」+绿色文字**
2. 用户点击「点击切换状态」按钮,触发绑定的onClick回调
3. 回调里把isOpen的值改成了!false也就是true
4. 因为isOpen是被@State标记的状态变量,值改变后ArkUI自动刷新页面
5. 最终页面变成**「开关已开启」+红色文字**,再点一次就会切回去,循环往复

这个是一个状态变量做带限制的计数器例子
声明状态变量:用@State定义了一个数字类型的变量count,初始值是0,@State让这个数字变的时候,页面上的数字能自动刷新,不用我们手动改界面。
界面布局最上方用大字号加粗文字,显示当前count的数值;
接下来并排放两个按钮,分别是「递增+」「递减-」,还提示了当前数值范围是0-10,用灰色小字标注。
按钮点击逻辑:点**递增+**按钮的时候:会先判断count是不是小于10,如果满足,就让count加1;如果已经到10了,就不做改动,保证数字不会超过上限;
点**递减-**按钮的时候:会先判断count是不是count减1;大于0,如果满足,就让如果已经是0了,就不改动,保证数字不会低于下限;
最终效果:每次点按钮,count符合范围限制就会改变数值,而因为它是@State状态变量,页面最上方的数字会自动刷新,最终就得到了右边预览里,可控增减的计数器效果。
四.TextInput输入框组件
TextInput是单行输入框:TextInput()
TextInput是HarmonyOS ArkUI框架里的单行文本输入核心组件,专门用于采集用户短文本信息,是登录页、搜索框、表单等场景的基础交互入
- 支持自定义占位提示文字、输入框尺寸、背景样式
- 内置多种输入类型适配:普通文本、密码、邮箱、手机号、数字等,自动匹配对应软键盘
- 支持输入内容监听、回车提交、焦点变化等交互事件


整体页面设置
和之前的登录页逻辑一样,让整个页面占满屏幕,同时把所有内容都自动居中,每块内容之间留出30的空隙,保证页面不拥挤。
大标题设置
顶部做了「完善个人信息」的大标题:用了超大字号+加粗字体,还在标题下方留了足够空隙,和下方输入框分隔开,让页面层次很清晰。
三个信息输入三个填写信息的输入框框
从上往下做了,样式完全统一:都是相同的宽度、更大的高度、浅灰色背景、圆角设计,看起来清爽柔和:

整体布局设置
最外层把整个页面内容整体居中排布,占满整个手机屏幕,所有内容之间留space30的空隙,让页面不会挤在一起。
先写了一个大标题加粗fontweight
第一个输入框(账号输入)
• 先加提示文字请输入学号/手机号码,用户没输入的时候,输入框就会显示这个提示,告诉用户该填什么;
• 还设置了固定宽度、高度,浅粉色的背景、合适的字体大小,加了圆角让输入框更好看不生硬。 第二个输入框(密码输入)
这是密码输入框,尺寸样式和账号输入框基本一致,多了一个特殊设置:type(InputType.Password),就是把输入的内容隐藏成圆点,和右边预览效果一样,防止别人看到你的密码,更安全。提示文字是请输入密码,告诉用户这里填密码。
设置了一个简单的按钮 并把整体内容居中
简单结合@State状态变量和输入框联动

定义状态变量
用@State声明了一个字符串变量inputText,初始值是空字符串,它是我们用来同步输入内容的"存储器",因为是@State修饰,它变了页面就会自动刷新内容。
做提示文本
页面上方先放了一行文字,用来实时显示你输入的内容,文字里直接插入了我们定义的状态变量inputText,变量变了这里显示的内容就会自动跟着变。
输入做了一个占满宽度的输入框绑定与更新
下方框,提示文字是请输入任意内容,做了这两个关键绑定:先把输入框的内容,和状态变量inputText绑定在一起;
再加上onChange监听:当输入框内容变化的时候,会把用户最新输入的内容,直接赋值给我们的状态变量inputText。
最终效果
只要你在输入框里打字,onChange就会把新输入的内容存到inputText里,而因为inputText是状态变量,页面上方的文本就会自动刷新,实时把你输入的内容显示出来——这就是状态变量和输入框的双向联动,非常直观的体现了状态变量的作用。

更多推荐

所有评论(0)