HarmonyOS鸿蒙Next中多窗场景下,RichEditor设置焦点后,怎么不会自动弹出软键盘

HarmonyOS鸿蒙Next中多窗场景下,RichEditor设置焦点后,怎么不会自动弹出软键盘

RichEditor 在自由多窗模式下,通过按钮切换焦点,键盘没出来,代码如下

@Entry
@Component
struct Index {
    controller: RichEditorController = new RichEditorController()
    @State controllerIsEditing: boolean = false
    @Builder

    build() {
      Column() {
        Row() {
          Button("弹窗输入框").onClick(() => {
            focusControl.requestFocus("richEditor")
          })
            .padding(5)

        }
        RichEditor({ controller: this.controller })
          .key("richEditor")
          .onEditingChange((isEditing: boolean) => {
            console.log("Current Editing Status:" + isEditing)
          })
          .height(400)
          .borderWidth(1)
          .borderColor(Color.Red)
          .width("100%")
      }
  }
}

更多关于HarmonyOS鸿蒙Next中多窗场景下,RichEditor设置焦点后,怎么不会自动弹出软键盘的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

窗口模式下,之前RichEditor在被动获焦时,默认不绑定并弹出键盘。最新的商用发布版本已经优化,被动获焦默认拉起键盘。升级版本后应该能解决问题。

如果要使用旧版本的系统,可以用如下规避方案,手动attach键盘:

import { inputMethod } from '@kit.IMEKit';

@Entry
@Component
struct Index {
  controller: RichEditorController = new RichEditorController()
  @State controllerIsEditing: boolean = false
  private inputController: inputMethod.InputMethodController = inputMethod.getController();

  @Builder
  build() {
    Column() {
      Row() {
        Button("弹窗输入框")
          .padding(5)
          .onClick(() => {
            this.attachAndListener(); // 点击控件
          })
      }
      RichEditor({ controller: this.controller })
        .key("richEditor")
        .onEditingChange((isEditing: boolean) => {
          console.log("Current Editing Status:" + isEditing)
        })
        .height(400)
        .borderWidth(1)
        .borderColor(Color.Red)
        .width("100%")
    }
  }

  async attachAndListener() { // 绑定和设置监听
    await this.inputController.attach(true, {
      inputAttribute: {
        textInputType: inputMethod.TextInputType.TEXT,
        enterKeyType: inputMethod.EnterKeyType.SEARCH
      }
    });
  }
}

更多关于HarmonyOS鸿蒙Next中多窗场景下,RichEditor设置焦点后,怎么不会自动弹出软键盘的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,RichEditor多窗场景下焦点获取后不自动弹出软键盘是预期行为。系统通过inputMethodManagershowSoftInput()方法控制键盘显示,但多窗口模式下会抑制自动弹出以避免交互冲突。需手动调用showSoftInput()显式请求键盘显示,示例代码:

let inputMethodController = inputMethodManager.getController();
inputMethodController.showSoftInput();

该设计确保多窗口场景下的输入可控性。

在HarmonyOS Next多窗场景下,RichEditor设置焦点后不自动弹出软键盘的问题,可能是由于多窗口模式下的输入法管理策略导致的。建议尝试以下解决方案:

  1. 确保已正确设置输入法请求:
Button("弹窗输入框").onClick(() => {
  focusControl.requestFocus("richEditor")
  this.controller.requestKeyboard() // 显式请求键盘
})
  1. 检查窗口焦点状态: 多窗口模式下需要确保当前窗口具有输入焦点,可以监听窗口焦点变化:
.onWindowFocusChange((hasFocus: boolean) => {
  if(hasFocus && this.controllerIsEditing) {
    this.controller.requestKeyboard()
  }
}
  1. 验证RichEditor的编辑状态: 确保在设置焦点的同时将编辑器置于编辑模式:
Button("弹窗输入框").onClick(() => {
  this.controllerIsEditing = true
  focusControl.requestFocus("richEditor")
})

这个问题通常是由于多窗口模式下系统对输入法显示的更严格控制导致的,需要显式请求键盘显示。

回到顶部