HarmonyOS鸿蒙Next中为什么TextInput的passwordIcon不能设置大小?
HarmonyOS鸿蒙Next中为什么TextInput的passwordIcon不能设置大小? 为什么TextInput的cancelButton都能设置大小,passwordIcon却不行,希望增加这个api
当前的UX规格不支持更改icon图标的大小及位置,许多APP均是使用的此规格,由于并不阻塞功能的开发,此场景可以通过实现一个自定义组件,来完成行尾密码图标位置、大小、颜色的修改。 自定义组件由TextInput和Image组成,使用Stack容器作为父容器。需要注意的是需要将TextInput自带的passwordIcon设置为不显示,然后将需要替换的图标放入到Image组件中即可,此时即可随意更改位置、大小、颜色。具体代码细节如下:
1.新建一个自定义组件TextInputExample。
TextInputExample.ets
@Entry
@Component
export struct TextInputExample {
// TextInput行尾图标宽度
@State iconWidth: number = 40
// TextInput行尾图标宽度
@State iconHeight: number = 40
// TextInput组件高度
@State TextInputHeight: number = 56
// TextInput输入内容
@State text: string = ''
// 密码是否可见
@State passwordState: boolean = false
// TextInput行尾图标图片
@State icon: Resource = $r('app.media.ic_public_password_invisible');
// TextInputController
controller: TextInputController = new TextInputController()
build() {
Column() {
Flex({ direction: FlexDirection.Row }) {
Stack() {
TextInput({ text: this.text, controller: this.controller })
.type(InputType.Password)
.placeholderFont({ size: 16, weight: 400 })
.showPasswordIcon(false) // 此处需将自带的行尾小眼睛图标设置成不显示
.showPassword(this.passwordState)
.width('100%')
.height(this.TextInputHeight)
.backgroundColor('#E8E7E7')
.onChange((value: string) => {
this.text = value
})
// 使用Image组件自定义实现行尾图标
Image(this.icon)
.margin({
left: 290
})
.width(this.iconWidth)
.height(this.iconHeight)
.onClick(() => {
// 点击行尾图标改变状态和icon
this.passwordState = !this.passwordState
this.icon = $r(this.passwordState ? 'app.media.ic_public_password_visible' :
'app.media.ic_public_password_invisible')
})
}
}
}
.width('100%')
.height('100%')
}
}
2.调用自定义组件。 Index.ets
import { TextInputExample } from './TextInputExample';
@Entry
@Component
struct Index {
build() {
Column() {
// icon宽高20vp
TextInputExample({ iconWidth: 20, iconHeight: 20 })
.height('50vp')
Blank()
// icon宽高30vp
TextInputExample({ iconWidth: 30, iconHeight: 30 })
.height('50vp')
Blank()
// icon宽高40vp
TextInputExample({ iconWidth: 40, iconHeight: 40 })
.height('50vp')
Blank()
// icon宽高50vp
TextInputExample({ iconWidth: 50, iconHeight: 50 })
.height('50vp')
}
.height('50%')
.width('100%')
.margin({ top: 50 })
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
【背景知识】 TextInput为单行文本输入框组件。可以通过InputType设置输入框类型,常见的类型有:Normal、Password、Email、Number、PhoneNumber等。在TextInput输入类型为Password时,输入的字符会表现为点(·),在showPasswordIcon设置为true时,行尾会有一个小眼睛图标,点击可控制密码的显隐
更多关于HarmonyOS鸿蒙Next中为什么TextInput的passwordIcon不能设置大小?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,TextInput组件的passwordIcon目前确实没有直接提供调整大小的API,这主要是由于设计一致性考虑。passwordIcon作为系统级的安全输入标识,其视觉规格遵循了HarmonyOS的设计规范,以确保在不同设备和场景下密码输入体验的统一性和可识别性。
相比之下,cancelButton(清除按钮)允许自定义大小,是因为它属于辅助操作控件,应用场景更灵活,开发者可能需要根据界面布局调整其尺寸。
如果你需要调整密码图标区域的触控或视觉表现,可以通过调整TextInput的整体布局或使用自定义样式来实现,但直接修改passwordIcon的尺寸在当前版本中不支持。该需求已被记录,未来版本可能会评估扩展API的灵活性。


