【学习笔记】HarmonyOS 鸿蒙Next 自定义一个数字输入组件TextInputNumber
【学习笔记】HarmonyOS 鸿蒙Next 自定义一个数字输入组件TextInputNumber
预览样式
@ComponentV2
export default struct TextInputNumber {
@Param value: number = 10
@Event $value: (val: number) => void = (val: number) => {
}
@Event onChange: (val: number) => void = (val: number) => {
}
@Param min: number = 0
@Param max: number = 9999
@Local val: number = 1
// 外部参数变化重新赋值
@Monitor(‘value’)
onValueChange() {
this.val = this.value
}
// 回调给外部
@Monitor(‘val’)
onValChange() {
this.$value(this.val)
this.onChange(this.val)
}
build() {
Row() {
Button() {
Text() {
SymbolSpan($r(‘sys.symbol.minus’))
}
.fontSize(18)
.fontColor(this.val > this.min ? ‘#555’ : ‘#d6d6d6’)
.textAlign(TextAlign.Center)
}
.type(ButtonType.Normal)
.stateEffect(this.val > this.min ? true : false)
.width(36)
.height(36)
.backgroundColor(’#f5f5f5’)
.onClick(() => {
if (this.val > this.min) {
this.val–
} else {
this.val = this.min
}
})
TextInput({ text:${this.val}
})
.type(InputType.Number)
.width(46)
.height(36)
.textAlign(TextAlign.Center)
.padding(0)
.borderRadius(0)
.backgroundColor(’#f5f5f5’)
.onChange((value: string) => {
this.val = Number(value)
})
.onEditChange((isEditing: boolean) => {
if (!isEditing) {
if (this.val < this.min) {
this.val = this.min
} else if (this.val > this.max) {
this.val = this.max
}
}
})
Button() {
Text() {
SymbolSpan($r(‘sys.symbol.plus’))
}
.fontSize(18)
.fontColor(this.val < this.max ? ‘#555’ : ‘#d6d6d6’)
.textAlign(TextAlign.Center)
}
.type(ButtonType.Normal)
.stateEffect(this.val < this.max ? true : false)
.width(36)
.height(36)
.backgroundColor(’#f5f5f5’)
.onClick(() => {
if (this.val > this.max) {
this.val = this.max
} else {
this.val++
}
})
}
.borderRadius(5)
.clip(true)
.backgroundColor(’#f5f5f5’)
.margin({ top: 5 })
}
}
1 回复
作为IT专家,对于HarmonyOS 鸿蒙Next的开发有一定了解。自定义一个数字输入组件TextInputNumber,可以通过对TextInput组件进行配置和扩展来实现。
TextInput组件本身提供了多种输入类型,包括Number纯数字输入模式。因此,自定义TextInputNumber组件时,可以直接设置TextInput的type属性为InputType.Number。
此外,为了增强组件的功能性和用户体验,可以添加一些额外的属性和事件处理函数。例如,可以设置placeholder属性来提供无输入时的提示文本,设置backgroundColor属性来改变输入框的背景颜色。同时,可以绑定onChange事件来获取输入框内改变的内容,以便进行后续的数据处理。
示例代码如下:
@Entry
@Component
struct TextInputNumber {
build() {
Column() {
TextInput({
placeholder: '请输入数字',
type: InputType.Number,
backgroundColor: '#FFFFFF',
onChange: (value: string) => {
console.info('输入的数字:', value);
}
}).width('100%').margin({top: 20});
}
}
}
上述代码创建了一个简单的TextInputNumber组件,它只允许用户输入数字。当输入内容发生变化时,会在控制台输出当前输入的数字。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。