【HarmonyOS】输入框焦点控制实现键盘显隐和进入页面默认弹出键盘获取a焦点设置

【HarmonyOS】输入框焦点控制实现键盘显隐和进入页面默认弹出键盘获取a焦点设置

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

问题背景: 鸿蒙中输入框控件,TextInput最常见的控制,即:针对输入框焦点控制,获取焦点,失去焦点。达到用户方便操作输入和退出输入。

因为输入框一定会伴随着键盘交互,一般在逻辑控制上和UI渲染上,都可能会需要动态调整改焦点

另外一个比较常用的需求是,进入页面,键盘就自动弹出,输入框默认获取焦点

解决方案: 问题一:

1.首先调用此接口可以主动让焦点转移至参数指定的组件上:

focusControl.requestFocus("id");

注意: 1.支持焦点控制的组件:TextInput、TextArea、Search、Button、Text、Image、List、Grid。焦点事件当前仅支持在真机上显示运行效果。

2.监听监控自身的获取焦点回调和失去焦点回调: onFocus onBlur

3.点击控件时需要设置控件获取焦点

问题二: 1.进入页面,键盘就自动弹出,需要在输入框控件上设置 defaultFocu(true)

注意: defaultFocus对于自定义view不生效【Set default focused component when a page create.】

DEMO示例:

import { promptAction } from **********';
import { BusinessError } from **********';

/**
 * 焦点界面
 */
@Entry
@Component
struct FocusPage {

  private TAG: string = "FocusPage";

  private ID_TARGET_TEXT_INPUT: string = "ID_TARGET_TEXT_INPUT";

  // 是否能获焦,默认false
  @State isFocusable: boolean = true;

  private requestFocus(){
    focusControl.requestFocus(this.ID_TARGET_TEXT_INPUT);
  }

  private setFocus(){
    this.isFocusable = true;
    this.requestFocus();
  }

  onClickSetFocus = ()=>{
    this.setFocus();
  }

  onClickResetFocus = ()=>{
    // 禁用焦点,就可直接失去焦点
    this.isFocusable = false;
  }

  private showToast(content: string){
    try {
      promptAction.showToast({
        message: content,
        duration: 2000
      });
    } catch (error) {
      let message = (error as BusinessError).message
      let code = (error as BusinessError).code
      console.error(this.TAG, `showToast args error code is ${code}, message is ${message}`);
    };
  }

  build() {
    Column(){
      TextInput()
        .id(this.ID_TARGET_TEXT_INPUT)
        .size({
          width: px2vp(600),
          height: px2vp(200)
        })
        .defaultFocus(true) // 设置默认焦点为true,进入页面就会获取焦点,弹出键盘
        .focusable(this.isFocusable)
        // 获得焦点回调
        .onFocus(()=>{
          // do sth ..
          this.showToast("onFocus 获得焦点回调");
        })
        // 失去焦点回调
        .onBlur(()=>{
          // do sth ..
          this.showToast("onBlur 失去焦点回调");
        })
        .onClick(()=>{
          this.setFocus();
        })

      Row(){
        Button("click set focus")
          .size({
            width: px2vp(600),
            height: px2vp(200)
          })
          .margin({ top: px2vp(100) })
          .onClick(this.onClickSetFocus)

        Blank()

        Button("click reset focus")
          .size({
            width: px2vp(600),
            height: px2vp(200)
          })
          .margin({ top: px2vp(100) })
          .onClick(this.onClickResetFocus)
      }
      .size({
        width: "100%",
        height: px2vp(200),
      })
      .padding({ left: px2vp(20), right: px2vp(20) })
    }
    .justifyContent(FlexAlign.Center)
    .size({
      width: "100%",
      height: "100%"
    })
  }
}
#harmonyos#
全部评论

相关推荐

一、5-21一面 1h20min1、自我介绍2、你目前学校教了哪些课程?你主要学了哪些课程??3、说一下你对C++的理解4、介绍一下STL的容器,比如说具体实现、时间复杂度之类的5、(我讲了一部分后说)直接跳到重要的吧,说说unordered_map和map有什么区别,平时怎么选择?6、讲一讲模版特化7、除了模版特化还有没有其他静态多态的方式?8、动态多态是怎么实现的?9、说说你对线程和进程的理解10、线程更轻量化?可以举个例子吗?11、你对协程了解么12、多核CPU条件下,一般多线程和多进程要怎么选择?13、线程同步的方案有哪些?14、你学了网络对吧,那你说说当你在网页里输入url再到页面渲染的过程中发生了什么15、TCP和UDP的区别是什么16、什么时候考虑用UDP?17、游戏开发确实经常用UDP,那难道我们一点也不考虑可靠性吗?(类似QUIC那样应用层实现可靠机制)18、平时玩过哪些游戏??(聊了点想法)19、TCP更慢,具体是慢在哪里呢?20、TCP有哪些确保可靠的机制21、说说你的高并发内存池项目是怎么做的22、他是如何解决无锁并发和内存碎片的?23、为什么要有内存对齐?24、遇到的最大的挑战是什么?25、反问环节二、5-29二面  1h1、自我介绍2、深入拷打项目细节      ……3、考察内存对齐4、深入vector、list、unordered_map、map的迭代器失效问题5、反问环节三、6-04hr面   15min就问一些情况  比如实习时间、工作的稳定性、手上是否有offer四、6-05云证并转录用评估五、6-10通知已oc
查看23道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务