ops-transformer算子库——Transformer架构在昇腾NPU上的深度优化实现
2026/6/12 22:52:52
https://www.bilibili.com/video/BV1jomdBBE4H/
NumberInput是控件库中专用于数字输入的组件,支持步进器、范围限制、精度控制等功能,适用于数量输入、价格输入、百分比输入等需要精确数字控制的场景。
数字输入框采用精确易用设计,具有以下特点:
import{NumberInput}from'../components/base'@Entry @Component struct MyPage{@Statenumber:number=0build(){Column({space:20}){// 基础数字输入框NumberInput({value:$number,placeholder:'请输入数字'})// 带标签的数字输入框NumberInput({value:$number,placeholder:'请输入数量',label:'数量'})// 带范围限制的数字输入框NumberInput({value:$number,placeholder:'请输入0-100之间的数字',label:'百分比',min:0,max:100})}.width('100%').height('100%').padding(20).justifyContent(FlexAlign.Center)}}NumberInput使用@Link实现双向绑定,需要使用$variableName语法:
@Statenumber:number=0NumberInput({value:$number// 使用 $ 创建双向绑定})| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | @Link number | - | 数字值(必需,双向绑定) |
placeholder | string | '请输入数字' | 占位符文本 |
label | string | '' | 标签文本 |
hint | string | '' | 提示文本(显示在输入框下方) |
errorMessage | string | '' | 错误提示文本(优先级高于 hint) |
inputSize | 'small' | 'medium' | 'large' | 'medium' | 输入框尺寸 |
disabled | boolean | false | 是否禁用 |
readonly | boolean | false | 是否只读 |
required | boolean | false | 是否必填 |
min | number | Number.NEGATIVE_INFINITY | 最小值 |
max | number | Number.POSITIVE_INFINITY | 最大值 |
step | number | 1 | 步进值 |
precision | number | 0 | 精度(小数位数,0-10) |
showStepper | boolean | true | 是否显示步进器按钮 |
showBrand | boolean | true | 是否显示品牌标识 |
inputWidth | string | number | '100%' | 输入框宽度 |
| 尺寸 | 高度 | 字体大小 | 按钮大小 | 内边距(左右) |
|---|---|---|---|---|
small | 48vp | 14vp | 24vp | 12vp |
medium | 60vp | 16vp | 28vp | 14vp |
large | 72vp | 18vp | 32vp | 16vp |
@Entry @Component struct NumberExample1{@Statenumber:number=0build(){Column({space:15}){NumberInput({value:$number,placeholder:'请输入数字'})Text(`当前值:${this.number}`).fontSize(14).fontColor('#666')}.width('100%').padding(20)}}@Entry @Component struct NumberExample2{@Statenumber:number=0build(){Column({space:15}){NumberInput({value:$number,placeholder:'请输入数量',label:'数量',hint:'请输入1-100之间的数字'})NumberInput({value:$number,placeholder:'请输入价格',label:'价格',errorMessage:'价格不能为负数'})}.width('100%').padding(20)}}@Entry @Component struct NumberExample3{@State percentage:number=50build(){Column({space:15}){NumberInput({value:$percentage,placeholder:'请输入0-100之间的数字',label:'百分比',min:0,max:100,hint:'范围:0-100'})Text(`当前值:${this.percentage}%`).fontSize(14).fontColor('#666')}.width('100%').padding(20)}}@Entry @Component struct NumberExample4{@State quantity:number=0build(){Column({space:15}){NumberInput({value:$quantity,placeholder:'步进值为5',label:'数量',step:5,min:0,max:100,hint:'每次增减5'})Text(`当前值:${this.quantity}(步进:5)`).fontSize(14).fontColor('#666')}.width('100%').padding(20)}}@Entry @Component struct NumberExample5{@State price:number=0build(){Column({space:15}){NumberInput({value:$price,placeholder:'保留2位小数',label:'价格',precision:2,min:0,step:0.1,hint:'保留2位小数'})Text(`当前价格:¥${this.price.toFixed(2)}`).fontSize(14).fontColor('#666')}.width('100%').padding(20)}}@Entry @Component struct NumberExample6{@State number1:number=0@State number2:number=0@State number3:number=0build(){Column({space:15}){NumberInput({value:$number1,placeholder:'小尺寸',inputSize:'small'})NumberInput({value:$number2,placeholder:'中等尺寸(默认)',inputSize:'medium'})NumberInput({value:$number3,placeholder:'大尺寸',inputSize:'large'})}.width('100%').padding(20)}}@Entry @Component struct NumberExample7{@State number1:number=0@State number2:number=100@State number3:number=200build(){Column({space:15}){NumberInput({value:$number1,placeholder:'请输入数字',label:'必填项',required:true})NumberInput({value:$number2,placeholder:'请输入数字',label:'禁用状态',disabled:true})NumberInput({value:$number3,placeholder:'请输入数字',label:'只读状态',readonly:true})}.width('100%').padding(20)}}@Entry @Component struct NumberExample8{@Statenumber:number=0build(){Column({space:15}){NumberInput({value:$number,placeholder:'不显示步进器按钮',label:'数字',showStepper:false})Text('提示:隐藏步进器后,只能通过键盘输入').fontSize(14).fontColor('#666')}.width('100%').padding(20)}}@Entry @Component struct ProductQuantity{@State quantity:number=1@State price:number=99.99build(){Column({space:20}){Text('商品信息').fontSize(24).fontWeight(FontWeight.Bold)NumberInput({value:$quantity,placeholder:'请输入数量',label:'数量',min:1,max:999,step:1,hint:'范围:1-999'})NumberInput({value:$price,placeholder:'请输入价格',label:'单价',precision:2,min:0,step:0.01,hint:'保留2位小数'})Text(`总价:¥${(this.quantity*this.price).toFixed(2)}`).fontSize(18).fontWeight(FontWeight.Bold).fontColor('#007AFF')}.width('100%').padding(30)}}@Entry @Component struct ConfigForm{@State width:number=100@State height:number=100@State opacity:number=100@State rotation:number=0build(){Column({space:20}){Text('参数配置').fontSize(24).fontWeight(FontWeight.Bold)NumberInput({value:$width,placeholder:'请输入宽度',label:'宽度',min:0,max:1000,step:1,required:true})NumberInput({value:$height,placeholder:'请输入高度',label:'高度',min:0,max:1000,step:1,required:true})NumberInput({value:$opacity,placeholder:'请输入透明度',label:'透明度',min:0,max:100,step:1,hint:'范围:0-100'})NumberInput({value:$rotation,placeholder:'请输入旋转角度',label:'旋转角度',min:0,max:360,step:1,precision:0,hint:'范围:0-360度'})}.width('100%').padding(30)}}NumberInput 的所有样式都通过ComponentTheme配置,所有配置都在代码中,不依赖JSON文件。
import{ComponentTheme}from'../theme/ComponentTheme'// 修改主色(影响聚焦状态的边框颜色)ComponentTheme.PRIMARY_COLOR='#007AFF'// 修改错误色(影响错误状态的边框和提示颜色)ComponentTheme.ERROR_COLOR='#FF3B30'// 修改边框颜色ComponentTheme.BORDER_COLOR='#E5E5E5'// 修改圆角ComponentTheme.BORDER_RADIUS=8import{ComponentTheme}from'../theme/ComponentTheme'// 使用 setTheme 方法批量配置ComponentTheme.setTheme({primaryColor:'#007AFF',errorColor:'#FF3B30',borderRadius:8,spacing:16})推荐:根据使用场景选择尺寸
min和maxhint说明范围要求step: 1适用于数量、计数等step: 0.1或step: 0.01适用于价格、百分比等precision: 0适用于数量、计数等precision: 2适用于金额、价格等precision: 1或precision: 2适用于比例、折扣等showStepper: true,方便快速调整数值hint提供输入要求说明errorMessage显示明确的错误信息A: 不设置min和max,或使用默认值:
NumberInput({value:$number,// 不设置 min 和 max,默认无限制})A: 设置showStepper: false:
NumberInput({value:$number,showStepper:false})A: 使用precision属性:
NumberInput({value:$price,precision:2// 保留2位小数})A: 使用step属性:
NumberInput({value:$number,step:5// 每次增减5})A: 使用inputWidth属性:
NumberInput({value:$number,inputWidth:300// 固定宽度})NumberInput({value:$number,inputWidth:'100%'// 百分比宽度})A: 输入无效值(如非数字字符)时:
A: 可以在外部监听value变化,进行自定义验证:
@Statenumber:number=0@State errorMessage:string=''NumberInput({value:$number,errorMessage:this.errorMessage})// 在 aboutToUpdate 或其他地方验证aboutToUpdate(){if(this.number<0){this.errorMessage='不能为负数'}else{this.errorMessage=''}}NumberInput 是控件库中专用于数字输入的组件,具有以下核心特性:
$variableName创建双向绑定min和max设置范围限制step设置步进值precision设置小数精度showStepper控制步进器显示label属性添加标签hint或errorMessage显示提示inputSize属性选择合适尺寸ComponentTheme自定义全局样式下一篇预告:SearchInput(搜索输入框)详解
本文档属于《鸿蒙PC UI控件库开发系列文章》第9篇