HarmonyOS 鸿蒙Next 如何在普通类中调用自定义组件,并正常展示

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

HarmonyOS 鸿蒙Next 如何在普通类中调用自定义组件,并正常展示

需要在普通类中的某个方法内调用自定义组件,怎么实现呢?代码示例如图:

cke_1457.png


更多关于HarmonyOS 鸿蒙Next 如何在普通类中调用自定义组件,并正常展示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复
import { ComponentContent, UIContext, window } from '@kit.ArkUI'
import { hilog } from '@kit.PerformanceAnalysisKit'


class FakeToastManager {
  private currentContent: ComponentContent<Object> | undefined = undefined

  action(uiContext: UIContext) {
    this.currentContent = new ComponentContent<string>(uiContext, wrapBuilder(BuilderFake), '我是传递的内容')
    uiContext.getPromptAction().openCustomDialog(this.currentContent, {
      autoCancel: false,
      alignment: DialogAlignment.Bottom,
      isModal: false,
      offset: {
        dx: 0,
        dy: '-90vp'
      }
    })
    setTimeout(() => {
      uiContext.getPromptAction().closeCustomDialog(this.currentContent)
    }, 2000)
  }

  // Preview不可用,需要运行在模拟器跟真机
  actionFake() {
    window.getLastWindow(getContext()).then((windowClass) => {
      let uiContext = windowClass.getUIContext()
      this.action(uiContext)
    })
  }
}

@Entry
@ComponentV2
struct Index {
  private fakeToast: FakeToastManager = new FakeToastManager()

  build() {
    Navigation() {

      Column() {
        Button('Fake Toast').onClick(() => {
          this.fakeToast.action(this.getUIContext())
        })
        Blank()
        Text('在fake toast展示时不影响界面点击').onClick(() => {
          hilog.debug(0x000000, 'rainrain', 'click ---')
        })
      }.size({ width: '100%', height: '100%' })

    }.size({ width: '100%', height: '100%' })

  }
}

@Builder
function BuilderFake(text: string) {
  FakeToast({ text: text })
}

@ComponentV2
struct FakeToast {
  @Param text: string = ''

  build() {
    Column() {
      Text('我是假Toast')
      Text(this.text)
    }.backgroundColor(Color.Green)
  }
}

更多关于HarmonyOS 鸿蒙Next 如何在普通类中调用自定义组件,并正常展示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


打个样,其余逻辑可以自行补充,比如弹多个,还是弹一个。

可以显示了,感谢大佬!!!

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

先达成共识,我再甩给你代码吧。

这个Action是要达到有show的操作吗?如果是,那你需要了解一下artUI的体系。一个Compoent 能展示到屏幕上,它是需要window的,比如所有界面现在都是windowStage.loadContent后,才被展示的。内部也有UIContext来执行一些toast,dialog的操作。所以,这个问题是‘我想在action这里展示自定义toast,哪些API可以完成这个操作吗?’

这个Action是要达到有show的操作吗?如果不是,那是在这个Action里面更新Compoent数据?还要new 一个Compoent,通过return的方式返回,放到页面里?

我在这个action里调用官方提供的promptAction.showToast,是可以正常显示的 我实际是想实现类似promptAction.showToast的效果,但是需要带图片的toast

这个action是用来接收toast的属性值,传给自定义的toast,以便可以修改toast的样,然后再显示我想要的toast

在HarmonyOS 鸿蒙Next中,要在普通类中调用自定义组件并正常展示,可以按照以下步骤操作:

  1. 定义自定义组件: 在resources/base/res/layout目录下创建一个XML文件,定义你的自定义组件。例如,custom_component.xml

  2. 实现自定义组件的Java类(注意:鸿蒙使用ArkUI/eTS,不直接使用Java类,但这里模拟概念): 使用ArkUI/eTS脚本语言编写自定义组件的逻辑,并在resources/base/ets/common目录下创建相应的.ets文件。

  3. 在普通类中引用: 在你的普通类(即页面或组件类)中,通过XML布局文件引用自定义组件。例如,在MainAbilitySlice.ets中:

    <DirectionalLayout>
        <YourCustomComponent /> <!-- 引用自定义组件 -->
    </DirectionalLayout>
    

    确保YourCustomComponentcustom_component.xml中的定义匹配。

  4. 确保资源正确加载: 检查config.json文件,确保资源路径和组件定义正确无误。

  5. 编译并运行: 编译项目并运行,检查自定义组件是否按预期展示。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部