HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失

HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失 通过 promptactionopenCustomDialog 方法自定义了一个 toast,但是当焦点在输入框的时候,显示这个 dialog 会造成输入键盘隐藏,然后关闭了之后再弹出软键盘。

3 回复

您好,setWindowFocusable属性可设置窗口是否获焦,通过将自定义窗口setWindowFocusable属性设为false来控制窗口不获焦,从而避免自定义窗口与其他窗口软键盘的冲突。

设置openCustomDialog属性isModal为模态弹窗,setWindowFocusable设置false,来控制自定义Toast提示词弹窗仅展示弹窗内容而不获取焦点,消除对主窗口软键盘的影响。 参考demo如下:

import { promptAction} from '@kit.ArkUI'
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  context = this as common.UIAbilityContext;
  
  @Builder
  customDialogComponent() {
    Column() {
      Text('弹窗').fontSize(30)
    }.padding(5)
  }
  
  build() {
    Row() {
      Column({ space: 20 }) {
        TextInput({ placeholder: 'input your password...' })
          .width('95%')
          .height(40)
          .margin(20)
          .type(InputType.Password)
          .maxLength(9)
          .showPasswordIcon(true)
        Text('Click')
          .fontSize(30)
          .onClick(async () => {
            promptAction.openCustomDialog({
              builder: () => {
                this.customDialogComponent()
              },
              isModal: true,
              onDidAppear: async () => {
                //设置false,弹窗不抢焦
                let windowClass = await this.context.windowStage.getMainWindow()
                windowClass.setWindowFocusable(false)
              }
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中子窗口通过promptaction的openCustomDialog方法自定义toast导致软键盘消失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用promptAction.openCustomDialog方法自定义toast时,软键盘消失是由于该方法会触发系统级的窗口焦点变化,导致当前输入框失去焦点,从而隐藏软键盘。这是系统行为,与openCustomDialog的调用机制有关。

这是一个典型的焦点管理问题。在HarmonyOS Next中,当自定义Dialog显示时,系统会认为当前窗口失去焦点,导致软键盘自动隐藏。

建议检查以下几点:

  1. 确保Dialog的显示不会强制触发窗口焦点变化
  2. 尝试设置Dialog的focusable属性为false
  3. 考虑使用系统原生Toast替代自定义Dialog实现提示功能

如果必须使用自定义Dialog,可以尝试在显示Dialog后手动恢复输入框焦点并重新弹出软键盘。但要注意这可能会造成不好的用户体验。

回到顶部