HarmonyOS 弹窗布局被软键盘压缩

占满屏幕高度的dialog软键盘弹出时布局被压缩。

操作步骤:

1、已在EntryAbility windowStage.loadContent后设置windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET),已确认@Component组件生效,布局不会被软键盘压缩。

2、SelectCategorySidebarDialog中的控件设置expandSafeArea([SafeAreaType.KEYBOARD],[SafeAreaEdge.BOTTOM])。

3、SelectCategorySidebarDialog.open。

4、点击SelectCategorySidebarDialog中的TextInput打开软键盘,SelectCategorySidebarDialog布局被压缩。

源码:

// dialog的定义
@CustomDialog
export struct SelectCategorySidebarDialog {
  controller?: CustomDialogController

  build() {
    Column() {
      Blank()
      TextInput()
        .expandSafeArea([SafeAreaType.KEYBOARD], [SafeAreaEdge.BOTTOM])
    }
    .expandSafeArea([SafeAreaType.KEYBOARD], [SafeAreaEdge.BOTTOM])
    .backgroundColor(Color.White)
    .width("72.8%")
    .height("100%")
  }
}
// dialog初始化方式
selectCategoryDialogController: CustomDialogController | null = new CustomDialogController({
  builder: SelectCategorySidebarDialog(),
  autoCancel: true,
  customStyle: true,
  alignment: DialogAlignment.TopStart,
})

期待结果:软键盘直接遮挡dialog的布局。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

自定义弹窗默认避让输入法,不允许配置不避让。自定义弹窗仅适用于简单提示场景,当弹窗高度过大时建议用页面级的组件代替,或者使用半模态实现相关功能。

参考示例:

@Entry
@Component
struct Main4 {
  @State isShow: boolean = false
  @Builder
  myBuilder() {
    Column() {
      Button("关闭半模态").onClick(() => {
        this.isShow = false
      })
      TextInput()
    }
    .expandSafeArea([SafeAreaType.SYSTEM, SafeAreaType.KEYBOARD], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
    .borderRadius(10)
    .width("100%")
  }

  build() {
    Column() {
      Button('click me 打开半模态')
        .onClick(() => {
          this.isShow = !this.isShow
        })
    }
    .expandSafeArea([SafeAreaType.SYSTEM, SafeAreaType.KEYBOARD], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
    .bindSheet($$this.isShow, this.myBuilder(), { height: 400 })
    .justifyContent(FlexAlign.End)
    .width('100%')
    .height('100%')
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 弹窗不避让软键盘
790浏览 • 1回复 待解决
HarmonyOS 如何实现弹窗不规避软键盘
286浏览 • 1回复 待解决
如何实现弹窗软键盘的避让
1736浏览 • 1回复 待解决
HarmonyOS 软键盘操作API
31浏览 • 1回复 待解决
HarmonyOS dialog和软键盘
208浏览 • 1回复 待解决
HarmonyOS 软键盘问题
20浏览 • 1回复 待解决
HarmonyOS TextInput软键盘监听
189浏览 • 1回复 待解决
HarmonyOS 软键盘弹出方式
238浏览 • 1回复 待解决
HarmonyOS 如何监听软键盘收起
197浏览 • 1回复 待解决
HarmonyOS 如何监听软键盘弹出
197浏览 • 1回复 待解决
如何主动收起软键盘
508浏览 • 1回复 待解决
HarmonyOS 显示软键盘方法无效
96浏览 • 1回复 待解决
HarmonyOS如何代码收起软键盘
677浏览 • 1回复 待解决
HarmonyOS 软键盘弹出隐藏监听
237浏览 • 1回复 待解决
HarmonyOS 软键盘如何主动关闭?
200浏览 • 1回复 待解决