2020征文-TV「3.3 文本输入框」鸿蒙HarmonyOSTextField组件介绍和应用

开发 OpenHarmony
TextField组件是交互类组件之一,是程序用于和用户进行交互的重要组件之一。
[[359525]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

TextField组件是交互类组件之一,是程序用于和用户进行交互的重要组件之一。TextField组件允许用户在组件中编写和修改内容,与Text组件不同之处在于Text组件的内容是不可编辑的。而TextField类是继承自Text类的,因此Text类中的属性和方法在TextField实例中也是可以使用的。TextField组件是重要的交互类组件,我们常见的场景有聊天界面的文字录入框;登录界面的账号、密码输入框;内容类录入页面的标题框等等。那么我们来看看如何在UI界面上加上TextField组件。在MingComponent项目中新建TextFieldComponentExampleAbility元程序,然后修改text_field_component_example_layout.xml中的代码。如下所示:

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:height="match_content" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:hint="请输入..." 
  15.  
  16. ohos:text_size="50" 
  17.  
  18. ohos:padding="20"/> 

 

在TextField组件中有hint属性,这个属性是用于提示该组件的用途。比如我们在登录界面会在用户账号输入框中提示“请输入账号...”,这样能够使用户直观的了解该出填写那些数据。如果我们不设置hint属性,这对于用户不是很友好,同时也会给开发人员带来不便。我们也可以使用hint_color属性来重新更改提示信息的显示颜色。

很多时候我们使用TextField组件与用户交互,用户输入信息,而这个信息有可能会超出TextField组件的宽度,如果我们设置其height为match_content时,内容会自动换行。如果我们将其height设置为固定的值时,当内容换行时,只会显示当前的内容行,我们需要使用鼠标或者手指上下滑动才能看到被遮住的内容。

固定高度后,需要上下滑动才能查看

对于这种情况,我们可以使用max_text_lines属性来指定内容需要显示多少行,我们来修改text_field_component_example_layout.xml中的代码,如下所示:

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:height="50vp" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:hint="请输入..." 
  15.  
  16. ohos:text_size="50" 
  17.  
  18. ohos:padding="20" 
  19.  
  20. ohos:max_text_lines="2"/> 

 这里通过ohos:max_text_lines指定TextField组件最大行数为两行,两行内容填充完后,若还有内容的话将会直接拽在第二行的内容后,被隐藏。因此如果我们需要设置它的最大行数,同时也要考虑字数的限制。如下图我们输入两行内容后,再输入内容的话,将不会再显示,而是直接在光标处隐藏,如果你删除前面的内容,后面的内容将会出现。

一般我们使用文本输入框时,会有多种类型选择,比如输入的字符只能是英文字符,或者输入的字符只能是数字,又或者输入字符时以*号代替显示,在TextField组件中以text_input_type属性来设置文本的文本输入类型。值有:PATTERN_NUMBER 文本内容只包含数字,PATTERN_PASSWORD 输入文本内容以密码形式显示,PATTERN_TEXT 公用的文本模式。我们以password为例,代码如下。

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:height="match_content" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:hint="请输入..." 
  15.  
  16. ohos:text_size="50" 
  17.  
  18. ohos:padding="20" 
  19.  
  20. ohos:text_input_type="pattern_password"/> 

 

我们在登录界面上输入用户账号、密码后我们会点击登录按钮进行登录,如果我们仅仅是以简单的文本输入做交互,我们可以使用输入法选项来代替按钮的交互。TextField组件提供了input_enter_key_type属性来设置文本的输入选项,值有:ENTER_KEY_TYPE_GO 指示执行"go"动作的输入键类型,ENTER_KEY_TYPE_SEARCH 指示执行"search"动作的输入键类型,NTER_KEY_TYPE_SEND 指示执行"send"动作的输入键类型。我们以search为例,代码如下:

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:height="match_content" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:hint="请输入..." 
  15.  
  16. ohos:text_size="50" 
  17.  
  18. ohos:padding="20" 
  19.  
  20. ohos:text_input_type="pattern_password" 
  21.  
  22. ohos:input_enter_key_type="enter_key_type_search"/> 

 

通过上面的代码我们基本熟悉了TextField组件的使用,对于默认样式的TextField组件我们看起来很别扭,我们不知道它的界限在哪儿,这种UI界面对于用户来说不友好,对于这种问题我们怎么去解决呢?

  • 我们可以给整个布局一个与TextField组件不相同的背景色;

我们指定布局的背景色为“#CCCCCC”,TextField组件的背景色为“#F5F5F5”,这样我们就能很好的区分TextField组件的界限。


  • 我们可以自定义TextField组件的显示样式。

我们可以通过设置TextField组件的背景色,边框,圆角来自定义TextField组件的显示样式,已达到UI界面的美观。我们在graphic文件夹下新建background_text_field_component_example_layout.xml文件,在代码中配置属性,代码如下所示:

  1. ohos:shape="rectangle"
  2.  
  3.  
  4. ohos:color="#F5F5F5"/> 
  5.  
  6.  
  7. ohos:radius="20"/> 
  8.  
  9.  
  10. ohos:width="2" 
  11.  
  12. ohos:color="#00BCD4"/> 
  13.  
  14. 在text_field_component_example_layout.xml中引入自定义样式,如下所示: 
  15.  
  16.  
  17. ohos:height="match_content" 
  18.  
  19. ohos:width="match_parent" 
  20.  
  21. ohos:hint="请输入..." 
  22.  
  23. ohos:text_size="50" 
  24.  
  25. ohos:margin="20" 
  26.  
  27. ohos:padding="20" 
  28.  
  29. ohos:background_element="$graphic:background_text_field_component_example_layout"/> 

 

在TextField组件中为其提供了一个独有的方法setEditorActionListener(Text.EditorActionListener listener)用于为视图中的编辑器操作注册一个监听器。我们可以通过这个方法实现和按钮同等交互的操作。

  1. ohos:height="match_parent" 
  2.  
  3. ohos:width="match_parent" 
  4.  
  5. ohos:orientation="vertical"
  6.  
  7.  
  8. ohos:id="$+id:text_field_component" 
  9.  
  10. ohos:height="match_content" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:hint="请输入..." 
  15.  
  16. ohos:text_size="50" 
  17.  
  18. ohos:margin="20" 
  19.  
  20. ohos:padding="20" 
  21.  
  22. ohos:input_enter_key_type="enter_key_type_search" 
  23.  
  24. ohos:background_element="$graphic:background_text_field_component_example_layout"/> 
  25.  
  26.  
  27. ohos:id="$+id:text_field_editor_action" 
  28.  
  29. ohos:height="match_content" 
  30.  
  31. ohos:width="match_content" 
  32.  
  33. ohos:text="视图将响应并处理编辑器操作"/> 
  34.  
  35. @Override 
  36.  
  37. public void onStart(Intent intent) { 
  38.  
  39. super.onStart(intent); 
  40.  
  41. super.setUIContent(ResourceTable.Layout_text_field_component_example_layout); 
  42.  
  43. Text text = (Text) findComponentById(ResourceTable.Id_text_field_editor_action); 
  44.  
  45. TextField textField = (TextField) findComponentById(ResourceTable.Id_text_field_component); 
  46.  
  47. textField.setEditorActionListener(new Text.EditorActionListener() { 
  48.  
  49. @Override 
  50.  
  51. public boolean onTextEditorAction(int i) { 
  52.  
  53. if (i == 2) { 
  54.  
  55. text.setText("视图将响应并处理编辑器操作为:切换"); 
  56.  
  57. return true
  58.  
  59. else if (i == 3) { 
  60.  
  61. text.setText("视图将响应并处理编辑器操作为:搜索"); 
  62.  
  63. return true
  64.  
  65. else if (i == 4) { 
  66.  
  67. text.setText("视图将响应并处理编辑器操作为:发送"); 
  68.  
  69. return true
  70.  
  71.  
  72. return false
  73.  
  74.  
  75. }); 
  76.  

 

TextField组件的常用属性和方法这里就介绍这么多,我们小结一下 本节的内容。

  • 提示信息hint属性和提示信息颜色hint_color属性
  • 最大显示行数max_text_lines属性
  • 文本输入类型text_input_type属性
  • 输入键类型input_enter_key_type属性
  • 自定义TextField样式
  • 编辑器操作监听器

©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-12-04 12:42:59

组件鸿蒙Text

2020-12-09 11:53:24

鸿蒙开发HelloWord

2021-09-27 14:44:48

鸿蒙HarmonyOS应用

2020-12-28 11:19:06

鸿蒙HarmonyOSPage Abilit

2020-12-28 10:15:18

鸿蒙HarmonyOSListContain

2020-12-17 12:06:49

鸿蒙应用鸿蒙开发

2020-12-11 09:58:45

ShapeElemenXML自定义组件样式

2019-03-07 14:45:07

聊天工具富文本输入框前端

2020-12-22 09:48:18

鸿蒙HarmonyOS应用程序

2020-09-24 14:06:19

Vue

2020-12-22 11:09:20

鸿蒙Feature AbiAbilitySlic

2021-07-13 09:49:08

鸿蒙HarmonyOS应用

2020-12-04 12:22:03

鸿蒙UI组件

2023-10-20 08:02:25

图形编辑器前端

2011-07-22 15:32:53

iPhone 按钮 对话框

2020-12-23 11:36:23

鸿蒙HarmonyOS应用程序开发

2024-06-13 15:43:04

2022-04-06 18:29:58

CSSJS输入框

2020-12-14 11:44:29

开发js智能手表wearablewea

2020-12-23 11:24:34

鸿蒙开发IDE安装
点赞
收藏

51CTO技术栈公众号