#夏日挑战赛# 3.6 TextInput组件和TextArea组件 原创 精华

发布于 2022-6-14 22:09
浏览
2收藏

[ 本文正在参加星光计划3.0–夏日挑战赛 ]本节讲解ArkUI eTS文本输入组件TextInput和TextArea的基本用法,分别对应单行文本输入场景和多行文本输入场景。最后,针对TextInput组件UI外观无法定制的弊端,演示HUI文本输入增强组件Input的运行效果。

3.6.1 TextInput组件

新建TextInputSample.ets页面。TextInput组件的接口、属性和事件说明如下:

/**
 * 3.6.1 TextInput组件
 * 单行文本输入组件。
 *
 * 接口:
 *  TextInput(value?: { placeholder?: string })
 *    placeholder: 无输入时的提示文本。
 *
 * 属性:
 *  .type(InputType) 默认值InputType.Normal,设置输入框类型。
 *    InputType.Normal 基本输入模式。
 *    InputType.Password 密码输入模式。
 *    InputType.Email e-mail地址输入模式。
 *    InputType.Number 纯数字输入模式。
 *  .placeholderColor(Color) 设置placeholder颜色。
 *  .placeholderFont({
      size?: number,
      weight?:number | FontWeight,
      family?: string,
      style?: FontStyle
    }) 设置placeholder文本样式。
 *  .enterKeyType(EnterKeyType) 默认值EnterKeyType.Done,设置输入法回车键类型。
 *    EnterKeyType.Go 显示Go文本。
 *    EnterKeyType.Search 显示为搜索样式。
 *    EnterKeyType.Send 显示为发送样式。
 *    EnterKeyType.Next 显示为下一个样式。
 *    EnterKeyType.Done 标准样式。
 *  .caretColor(Color) 设置输入框光标颜色。
 *  .maxLength(number) 设置文本的最大输入字符数。
 *
 * 事件:
 *  .onChange(value: string) => void 输入发生变化时,触发回调。
 *  .onSubmit(callback: (enterKey: EnterKeyType) => void) 回车键或者软键盘回车键触发该回调,参数为当前软键盘回车键类型。
 *  .onEditChanged(callback: (isEditing: boolean) => void) 输入状态变化时,触发回调。
 */

其中:

接口参数placeholder是可选的,为了对用户更友好,建议设置。同时,建议使用文字资源,适应多语言显示。

属性placeholderColor建议使用颜色资源$r(“app.color.fgLevel1”),适应深色模式/浅色模式切换时的完美表现。

属性type、placeholderFont、enterKeyType和caretColor视需求而定,如果省略这几个属性也能满足需要,可以节省代码。

事件中onChange是最实用的,监测文本变化后可将值记录下来用于表单提交。其它两个事件通常可以省略。

调用示范代码如下:

      TextInput({ placeholder: $r("app.string.hint") })  // 无输入时的提示文本(可选)。
        .type(InputType.Normal)  // 输入框类型
        .placeholderColor($r("app.color.fgLevel1")) // 设置placeholder颜色
        .placeholderFont({ size: 20, weight: FontWeight.Normal, family: "sans-serif", style: FontStyle.Normal }) // 设置placeholder文本样式
        .enterKeyType(EnterKeyType.Next) // 设置输入法回车键类型
        .caretColor($r("app.color.info"))  // 设置输入框光标颜色
        .maxLength(20)  // 设置文本的最大输入字符数
        .onChange((value: string) => {
          console.log(value) // 输入发生变化时,触发回调
        })
        .onSubmit((enterKey) => {
          // 回车键或者软键盘回车键触发该回调
        })
        .onEditChanged((isEditing) => {
          // 输入状态变化时,触发回调
        })

在浅色模式和深色模式下运行效果,如下图所示:

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

本地预览器无法调出手机键盘,可在远程模拟器体验效果:

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

从上面的效果表现,我们发现TextInput组件已经是一个多态组件了:

TextInput组件的背景色可以自动适配深色模式和浅色模式;

组件的宽度默认撑开为100%,可以适配手机横竖屏和平板设备;

组件的外边框已设置为胶囊型边框外观,和胶囊行按钮类似。

3.6.2 TextArea组件

多行文本组件TextArea的接口、属性和方法与TextInput类似,说明如下:

/**
 * 3.6.2 TextArea组件
 * 多行文本输入组件。
 *
 * 接口:
 *  TextArea(value?: { placeholder?: string })
 *    placeholder: string 无输入时的提示文本。
 *
 * 属性:
 *  .placeholderColor(Color) 设置placeholder文本颜色。
 *  .placeholderFont({
      size?: number,
      weight?:number | FontWeight,
      family?: string,
      style?: FontStyle
    }) 设置placeholder文本样式。
    .caretColor(Color) 设置输入框光标颜色。
 *  .textAlign(TextAlign) 默认值TextAlign.Start,设置文本水平对齐方式。
 *    TextAlign.Center 水平居中对齐。
 *    TextAlign.Start 水平对齐首部。
 *    TextAlign.End 水平对齐尾部。
 *
 * 事件:
 *  .onChange(callback: (value: string) => void) 输入发生变化时,触发回调。
 */

相对TextInput组件,增加了一个设置文本水平对齐的属性.textAlign(TextAlign)。通常,我们会设置多行文本组件的高度属性和文本颜色属性。示范代码如下:

      TextArea({ placeholder: $r("app.string.hint") })  // 无输入时的提示文本(可选)。
        .placeholderColor($r("app.color.fgLevel2"))   // 设置placeholder颜色
        .placeholderFont({ size: 20, weight: FontWeight.Normal, family: "sans-serif", style: FontStyle.Normal }) // 设置placeholder文本样式
        .textAlign(TextAlign.Center)  // 设置文本水平对齐方式
        .caretColor($r("app.color.info"))  // 设置输入框光标颜色
        .height(100) // 多行文本框的高度
        .fontColor($r("app.color.fgLevel1")) // 输入文本颜色适配深色模式和浅色模式
        .onChange((value: string) => { // 输入发生变化时,触发回调
          console.log(value)
        })

在竖屏手机浅色模式和平板横屏深色模式下,效果如下:

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

可以看出,多行文本组件TextArea也是一个多态组件。

3.6.3 HUI文本输入增强组件Input

TextInput组件是一个已经被鸿蒙官方封装的多态组件,它的外观固定为胶囊型风格。如果希望文本输入组件是无边框效果呢?这个时候你会发现,即使你设置边框的属性,也没办法达成你想要的效果。在后面《第9章 为ArkUI量身打造的多态组件库HUI》中,我会发布一款文本输入增强组件,命名采用Html中通用的名称Input。Input组件从外观定制灵活性和功能性方面全面增强目前TextInput组件的不足。在远程模拟器上运行效果如下:

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

#夏日挑战赛# 3.6 TextInput组件和TextArea组件-开源基础软件社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
2
收藏 2
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐