环境及工具
HarmonyOS 5.0.0 Release
DevEcoStudio
适用于HarmonyOS Next原生开发
TextInput&TextArea
每天一个知识点,点点不一样。今天我们一起来学习输入框,多的不说少的不唠,立马开始。
TextInput(文本输入框)和 TextArea(多行文本区域)
TextInput 和 TextArea 是用户界面设计中用于接收用户输入文本的两种基本组件。它们广泛应用于各种表单、搜索栏、评论区等场景,是用户与应用程序交互的重要桥梁。
TextInput(文本输入框)
功能描述:
- 单一性: TextInput 通常用于输入简短的信息,如姓名、电话号码、电子邮件地址或密码。
- 限制长度: 可以设置最大字符数来限制用户输入的内容长度。
- 样式和行为: 支持多种形式的样式定制,比如边框颜色、背景色、占位符文本等;还可以根据需要启用或禁用输入框。
- 验证规则: 能够应用正则表达式或其他验证逻辑,确保输入符合特定格式,例如确保电子邮件地址正确无误。
- 辅助功能: 支持自动完成、自动校正、拼写检查等功能,提升用户体验。
使用场景:
- 当需要从用户那里收集简短且明确的信息时,如登录信息、个人资料字段等。
TextArea(多行文本区域)
功能描述:
- 多行支持: TextArea 允许用户输入多行文本,适合用来撰写较长内容,如留言、评论、描述等。
- 可调整大小: 用户可以根据需要调整 TextArea 的高度,一些实现还允许宽度调整。
- 字符计数: 提供实时字符计数功能,帮助用户了解剩余可用空间。
- 富文本编辑: 某些高级实现可能包含富文本编辑特性,如粗体、斜体、列表等格式化选项。
- 文件拖放: 在某些应用场景下,可以集成拖放文件上传功能,让用户直接将文件拖入 TextArea 中。
使用场景:
- 适用于需要用户输入较大篇幅文本的地方,如论坛发帖、产品评价、文档编写等。
交互特性
- 焦点管理: 当用户点击 TextInput 或 TextArea 时,它会获得焦点,显示光标,并准备接收键盘输入。失去焦点时,可能会触发验证逻辑。
- 占位符文本: 为了指导用户输入,可以在没有文本时显示提示信息(placeholder),当用户开始输入后消失。
- 错误反馈: 如果用户的输入不符合要求,应该给出清晰的错误提示,说明问题所在,并引导如何修正。
- 键盘导航: 支持通过 Tab 键在不同输入框之间切换,以及使用方向键、Home/End 等快捷键进行光标定位。
1、TextInput
1.1概念
TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面
1.2创建输入框
TextInput为单行输入框、TextArea为多行输入框。通过以下接口来创建。
TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})
TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})
单行输入框
TextInput()
TextArea()
1.3 常用参数和属性
TextInput()
TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})
1.3.1 常用参数
****参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
placeholder | ResourceStr | 否 | 设置无输入时的提示文本。 |
text | ResourceStr | 否 | 设置输入框当前的文本内容。从API version 10开始,该参数支持 $$ 双向绑定变量。 |
1.3.2 常用属性
名称 | 参数类型 | 描述 |
---|---|---|
type | InputType | 设置输入框类型。默认值:InputType.Normal |
showUnderline | boolean | 设置是否开启下划线。下划线默认颜色为'#33182431',默认粗细为1px,文本框尺寸48vp(下划线只支持InputType.Normal类型)。默认值:false |
passwordIcon | PasswordIcon | onIconSrc:输入状态时图标offIconSrc:隐藏状态时图标 |
placeholderColor | ResourceColor | 设置placeholder文本颜色。默认值跟随主题。 |
1.3.3 inputType部分枚举值
名称 | 描述 |
---|---|
Normal | 基本输入模式。 可输入数字、字母、下划线、空格、特殊字符。 |
Password | 密码输入模式。支持输入数字、字母、下划线、空格、特殊字符。密码显示小眼睛图标并且默认会将文字变成圆点。密码输入模式不支持下划线样式。在已启用密码保险箱的情况下,支持用户名、密码的自动保存和自动填充。 |
邮箱地址输入模式。支持数字,字母,下划线,.字符,以及@字符(只能存在一个@字符)。 | |
Number | 纯数字输入模式。 |
1.4 学以致用
@Entry
@Component
struct Page01_TextInput {
@State username:string =''
@State password:string =''
build() {
Column(){
TextInput({placeholder:'输入用户名',text:$$this.username})
.type(InputType.Normal)
.backgroundColor(Color.Transparent)
.borderRadius(0)
.height(60)
.border({
width:{bottom:1}
,color:'#ccc'
})
TextInput({placeholder:'请输入密码',text:$$this.password})
.type(InputType.Password)
.height(60)
.backgroundColor(Color.Transparent)
.borderRadius(0)
.border({
width:{bottom:1}
,color:'#ccc'
})
.passwordIcon({
onIconSrc:$r('app.media.ic_eyes_open'),
offIconSrc:$r('app.media.ic_eyes_close')
})
Row({space:20}){
Button('清空输入内容')
.onClick(()=>{
this.username=''
this.password=''
})
Button('获取输入内容')
.onClick(()=>{
AlertDialog.show({
message:`用户名:${this.username},密码:${this.password}`
})
})
}
.margin({top:10})
}
.padding(20)
}
}
2、TextArea
2.1用法
TextArea 可以用来设置多行文本,用法和TextInput基本一致
TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})
2.2常用参数和属性
2.2.1常用参数
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
placeholder | ResourceStr | 否 | 设置无输入时的提示文本。 |
text | ResourceStr | 否 | 设置输入框当前的文本内容。从API version 10开始,该参数支持 $$ 双向绑定变量。 |
2.2.2常用属性
名称 | 参数类型 | 描述 |
---|---|---|
type | InputType | 设置输入框类型。默认值:InputType.Normal |
placeholderColor | ResourceColor | 设置placeholder文本颜色。默认值跟随主题。 |
showCounter | value: boolean, options11+?: InputCounterOptions | 参数value为true时,才能设置options,文本框开启计数下标功能,需要配合maxlength(设置最大字符限制)一起使用。 |
maxLength | number | 设置文本的最大输入字符数。 默认不设置最大输入字符数限制。 到达文本最大字符限制,将无法继续输入字符,同时边框变为红色。 |
.... |
2.3学以致用
@Entry
@Component
struct Page02_TextArea {
@State info:string = ''
build() {
Column(){
TextArea({placeholder:'请输入内容',text:$$this.info})
.maxLines(1)
.maxLength(100)
.showCounter(true)
.height(150)
Row({space:20}){
Button('清空输入内容')
.onClick(()=>{
this.info=''
})
Button('获取输入内容')
.onClick(()=>{
AlertDialog.show({
message:this.info
})
})
}
.margin({top:10})
}
.padding(20)
}
}
注意事项
-
验证输入:
- 在提交表单之前,应该对用户输入的数据进行验证,确保符合预期格式和要求。
- 对于
TextInput
的密码字段,考虑使用安全输入模式(如隐藏字符)。
-
用户体验:
- 提供清晰的提示信息帮助用户理解应输入什么内容。
- 对于长文本输入(如
TextArea
),考虑实现自动保存功能,以防数据丢失。
-
性能优化:
- 如果
TextArea
需要处理大量文本输入,注意优化渲染性能,避免界面卡顿。 - 对于频繁更新的内容,考虑使用防抖(debounce)或节流(throttle)技术来减少不必要的计算。
- 如果
-
可访问性:
- 确保所有输入控件对于屏幕阅读器和其他辅助技术友好。
- 使用语义化的标签(如
aria-label
或aria-labelledby
)为用户提供额外的信息