HarmonyOS 鸿蒙Next popup显示位置优化

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next popup显示位置优化

Popup,不能够完全覆盖住

如何优化

具体要求:

1、弹出的 Popup高度不限制,根据里面的内容进行撑高。

2、宽度为屏幕的宽

3、弹起的位置正好在红化线条的位置(也就是刚好覆盖)

2 回复

1、grid设置了 columnsTemplate()或rowsTemplate(’’)属性时,给grid设置maxCount属性后就可以自适应高度。因为rowsTemplate、columnsTemplate仅设置其中的一个时,以下属性都不生效maxCount、layoutDirection、minCount、cellLength,但是设置maxCount后可以达到自适应高度的目的,所以maxCount的大小可以为任意值,如maxCount(0)。 Grid组件根据rowsTemplate、columnsTemplate属性的设置情况,可分为以下三种布局模式:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-container-scrollable-common-V13#flingspeedlimit11 CustomPopup占了全屏是因为子组件grid的默认大小是全屏了,给grid的设置成自适应高度的之后就可以了

2、如果想要汽泡设置为100%完整展示,可以设置为placement: Placement.BottomLeft 具体文档可参考: 

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-universal-attributes-popup-V13#custompopupoptions8类型说明

3、位置控制可以通过offset或者targetSpace,配合placement设置的值,进行位置控制,参考说明

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ohos-arkui-advanced-popup-V13#popupoptions

参考demo:

[@Component](/user/Component)

[@Entry](/user/Entry)

struct PopupExample{

  private arr: string[] = []

  [@State](/user/State) currentMenu: string = "测试0"

  [@State](/user/State) handlePopup: boolean = false

  aboutToAppear(): void {

    for (let i = 0; i < 20; i++) {

      this.arr.push('内部测试' + i)

    }

  }

  [@Builder](/user/Builder) CustomItem(str:string){

    Column(){

      Text(str)

        .fontColor(Color.Red)

        .width(80)

        .height(50)

    }

    .width('100%')

  }

  [@Builder](/user/Builder)

  customDialogBuilder() {

    Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }) {

      ForEach(this.arr, (item: string,index:number) => {

        Text(item + index).height(40).onClick(() => {

          this.currentMenu = item

          this.handlePopup = !this.handlePopup

        })

      })

    }

    .width('100%')

    .backgroundColor(Color.Gray)

    // .height('290.00vp')

  }

  build() {

    Column(){

      Column(){

        Line()

          .width('100%')

          .height(1)

          .backgroundColor(Color.Red)

          .bindPopup(this.handlePopup,{

            builder:this.customDialogBuilder(),

            enableArrow:false,//设置是否显示箭头。

            radius:0,//设置气泡圆角半径。

            width:'100%',

            targetSpace:0,

            mask:false,//设置气泡是否有遮罩层及遮罩

            onStateChange:(e)=>{//弹窗状态变化事件回调

              if (!e.isVisible) {

                this.handlePopup = false

              }

            }

          })

        Row(){

          Text('按钮')

            .onClick(()=>{

              this.handlePopup = !this.handlePopup

            })

        }

        .backgroundColor(Color.Red)

        .alignItems(VerticalAlign.Center)

        .justifyContent(FlexAlign.Center)

        .height('100%')

        .width(80)

      }

      .backgroundColor(Color.Yellow)

      .justifyContent(FlexAlign.End)

      .alignItems(HorizontalAlign.End)

      .margin({top:120})

      .width('100%')

      .height(40)

    }

    .backgroundColor(Color.White)

    .width('100%')

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next popup显示位置优化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next popup显示位置优化的问题,以下是一些专业建议:

  1. 自定义布局:利用鸿蒙系统的布局管理器,自定义popup的显示位置。通过调整布局参数,如margin、padding等,精确控制popup的弹出位置。
  2. 响应式布局:根据屏幕尺寸和分辨率,动态调整popup的显示位置和大小。这可以确保在不同设备上,popup都能以最佳位置和尺寸显示。
  3. 事件监听:通过监听屏幕触摸、滑动等事件,动态改变popup的显示位置。例如,当用户滑动屏幕时,popup可以跟随滑动方向进行微调。
  4. 使用动画效果:在popup显示和隐藏时,添加平滑的动画效果,以提升用户体验。动画效果也可以用于在显示位置发生变化时,提供更自然的过渡。

在进行popup显示位置优化时,请确保遵循鸿蒙系统的开发规范,避免影响系统的稳定性和安全性。如果经过上述优化后,问题依旧无法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部