
基于TextInput的常见自定义效果解决方案
场景描述
输入框一般用于来承载用户的信息录入,常用于搜索框、表单、对话框等场景。
场景一:TextInput实现输入框热搜词自动滚动及文字内容颜色渐变
输入框未获焦时热搜词自动滚动,输入框获焦时输入框热搜词暂停滚动,热搜词文字到输入框右侧时文字内容会渐变显示。
方案
1、用Stack组件堆叠Swiper和TextInput,让Swiper在TextInput中间显示核心代码。
2、使用Swiper组件显示热搜关键字并自动切换,将Swiper设置为纵向滑动.vertical(true),通过判断输入框是否有内容来控制Swiper的显示隐藏。
3、使用TextInput搜索框组件,根据搜索框是否处于编辑态控制Swiper组件开始和暂停滚动,设置搜索框最大行数为1。
4、点击搜索按钮时,退出编辑状态,如果搜索框没有内容提交当前热搜词。
5、当输入框热搜词文字过长时,设置输入框右边内容显示区域渐显效果,主要是用blendMode图像效果,将当前控件的内容与下方画布已有内容进行混合。.blendMode(BlendMode.SRC_IN, BlendApplyType.OFFSCREEN),SRC_IN只显示源像素中与目标像素重叠的部分,然后通过通用属性linearGradient设置颜色渐变效果
场景二:TextInput修改placeholder提示文字的大小
给placeholder提示文字设置颜色以及文字大小
效果图
方案
使用TextInput的属性placeholderFont设置placeholder文本样式,包括字体大小,字体粗细,字体族,字体风格。目前仅支持默认字体族;placeholderColor属性设置颜色。
场景三:TextInput输入的时候,当文字达到一定数量的时候,自动失去焦点,收起键盘
当输入框内容字符达到一定数量时,自动失去焦点,收起键盘
效果图
方案
主要是在onChange中通过判断输入的字符长度大于某个数量时,利用TextInputController.stopEditing方法控制键盘关闭。
场景四:TextInput输入手机号码可以分段展示
正常输入手机号码时显示效果如:XXX XXXX XXXX当有特殊字符如+,*特殊字符时,不加空格显示,一般情况无需我们手动输入国际代码。
方案
1、设置输入框类型为PhoneNumber类型TextInput({ text:${this.text} }).type(InputType.PhoneNumber).height('48vp'),电话号码输入模式。支持输入数字、空格、+ 、-、*、#,长度不限。
2、判断输入的是否为空格,当输入空格的时候去除空格,自定义一个判断方法如下:
3、判断是否有特殊字符,当有特殊字符的时候不加空格,自定义判断方法如下:
4、关于输入框内容分段显示主要是在onChange回调中实现,首先给输入的文字去除空格,然后通过判断是否有特殊字符来显示输入框效果,当有特殊字符时不展示分段效果,当没有特殊字符时分段展示手机号,核心代码如下:
场景五:输入框右边清除内容按钮
当输入框又内容显示时会显示右侧小图标,点击右侧图标会清空输入框内容,图标可以根据实际情况自行更改。
效果图
方案
当输入框输入文字时,右侧显示删除清空内容按钮,主要利用textInput属性cancelButton,该属性设置右侧清除按钮样式,不支持内联模式。
场景六:自定义密码图标的样式
点击眼睛图标动态切换图标样式以及设置密码的显隐状态
效果图
方案
通过状态变量动态改变图标样式,然后给输入框设置不显示默认的密码图标 .showPasswordIcon(false),图标动态切换接合密码的显隐状态.showPassword(this.changeState)来达到自定义密码图标的效果。
