【HarmonyOS】输入框焦点控制实现键盘显隐

【HarmonyOS】输入框焦点控制实现键盘显隐

问题背景:

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

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

解决方案:

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

focusControl.requestFocus("id");


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


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

onFocus

onBlur

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

DEMO示例:

dart 复制代码
import { promptAction } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

/**
 * 焦点界面
 */
@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)
        })
        .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%"
    })
  }
}
相关推荐
钛态4 分钟前
Flutter 三方库 ethereum_addresses 的鸿蒙化适配指南 - 掌控区块链地址资产、精密校验治理实战、鸿蒙级 Web3 专家
flutter·harmonyos·鸿蒙·openharmony·ethereum_addresses
提子拌饭13323 分钟前
开源鸿蒙跨平台Flutter开发:中小学百米跑信息记录表:基于 Flutter 的高精计时与运动学曲线引擎
flutter·华为·开源·harmonyos
2301_8227032032 分钟前
光影进度条:鸿蒙Flutter实现动态光影效果的进度条
算法·flutter·华为·信息可视化·开源·harmonyos
Industio_触觉智能43 分钟前
触觉智能Purple Pi OH开发板已适配OpenHarmony6.1,将作为LTS长期支持版,附API参考说明
鸿蒙·鸿蒙系统·openharmony·lts·开源鸿蒙·鸿蒙开发板·openharmony6.1
独特的螺狮粉1 小时前
城市空气质量简易指数查询卡片:鸿蒙Flutter框架 实现的空气质量查询应用
开发语言·flutter·华为·架构·harmonyos
互联网散修2 小时前
零基础鸿蒙应用开发第三十二节:JSON核心基础与文件的读写
华为·json·harmonyos
我的世界洛天依2 小时前
胡桃讲编程:华为鸿蒙系统能用 MT 管理器反编译吗?(安装包 + 系统根目录实战指南)
华为·harmonyos·机器翻译
李李李勃谦2 小时前
Flutter 框架跨平台鸿蒙开发 - 鲜花礼品配送
flutter·华为·harmonyos
2301_822703203 小时前
鸿蒙Flutter三方库适配:Flutter Markdown适配实战-鸿蒙平台的Markdown渲染解决方案
flutter·华为·信息可视化·开源·harmonyos·鸿蒙·三方库
李李李勃谦3 小时前
Flutter 框架跨平台鸿蒙开发 - 蛋糕甜品预订
flutter·华为·harmonyos