新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何把原生View扩展为Kuikly自定义组件:从平台桥接到Kotlin DSL的完整指南

发布时间:2026/9/28 20:48:10来源:尧图网络
如何把原生View扩展为Kuikly自定义组件:从平台桥接到Kotlin DSL的完整指南
如何把原生View扩展为Kuikly自定义组件从平台桥接到Kotlin DSL的完整指南【免费下载链接】KuiklyUI基于KMP技术的高性能、全平台开发框架具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意本仓库为Github仓库镜像PR或Issue请移步至Github发起感谢支持项目地址: https://gitcode.com/Tencent-TDS/KuiklyUIKuikly 是基于 KMPKotlin Multiplatform技术的高性能、全平台开发框架支持一套代码库覆盖 Android、iOS、鸿蒙、H5 与微信小程序。当框架内置组件无法满足业务需求或你想复用团队已有的原生 View 时Kuikly 自定义组件扩展机制允许你只写一次 Kotlin DSL 代码就把它暴露给所有平台使用。本文将带你完整走通「原生 View → Kuikly DSL → Compose 组件」的全流程。为什么需要 Kuikly 自定义组件Kuikly 已封装了Text、Image、List等常用组件但在真实业务中你经常会遇到想复用公司已有的原生 UI 组件如自研的图片加载控件需要平台专属能力例如 iOS 的毛玻璃、鸿蒙的 ArkUI 特效想让自己的组件同时支持传统 DSL 写法和 Compose 写法。Kuikly 的扩展机制正好解决这些问题Kotlin 侧只写一次组件定义各平台只需实现一个薄桥接层即可让组件在所有端可用。总体路线三层结构一图看懂一个完整的 Kuikly 自定义组件由三层组成层位置职责Kuikly DSL 层commonMainKotlin定义组件名、属性Attr、事件Event和调用方法原生桥接层Android / iOS / 鸿蒙 / H5 / 小程序把原生 View 暴露给 Kotlin 侧响应 setProp / call使用层业务代码通过 DSL 扩展函数或 Compose 组件直接调用详细设计与实现步骤可参考官方文档expand-native-ui.md。第一步在 Kuikly 侧定义 DSL 组件四件套一个 Kuikly 组件由四个部分组成viewName对应原生组件名、Attr属性集、Event事件集和组件自身方法。以官方 Demo 中的MyDemoCustomView为例核心代码非常简洁internal class MyDemoCustomView : GroupViewMyDemoCustomViewAttr, MyDemoCustomViewEvent() { override fun viewName(): String KRMyDemoCustomView override fun createAttr() MyDemoCustomViewAttr().apply { overflow(true) } override fun createEvent() MyDemoCustomViewEvent() } internal fun ViewContainer*, *.MyDemoCustom(init: MyDemoCustomView.() - Unit) { addChild(MyDemoCustomView(), init) }viewName()返回的字符串就是与原生侧对齐的「组件名」MyDemoCustom { }则是供业务侧调用的声明式入口。完整示例见MyDemoCustomView.kt。::: 小贴士Attr 方法通过message with msg把属性透传给原生侧Event 通过register(onMyViewTapped)注册原生回调。第二步各平台实现原生桥接层Kotlin 侧的属性、事件最终都会落到原生 View 的setProp处理属性与事件和call处理方法调用两个入口。各平台只需继承/实现对应的基类Android继承原生 View 并实现IKuiklyRenderViewExport接口iOS继承UIImageView等原生类并遵循KuiklyRenderViewExportProtocol协议类名必须与viewName()一致Swift 类需加objc鸿蒙继承KuiklyRenderBaseView实现setProp、call与createArkUIViewH5 / 微信小程序实现IKuiklyRenderViewExport接口操作实际的 DOM 节点。各平台的详细代码与宏说明如 iOS 的KUIKLY_SET_CSS_COMMON_PROP都在 expand-native-ui.md 中跟着做即可。第三步注册组件正式“曝光”给 Kuikly原生 View 写完后还需要注册。Android 侧在实现了KuiklyRenderViewDelegatorDelegate的类中重写registerExternalRenderView即可renderViewExport(KRMyDemoCustomView.VIEW_NAME) { context - KRMyDemoCustomView(context) }Demo 工程中的注册入口可参考ContextCodeHandler.kt。iOS 侧组件通过运行时暴露无需手动注册鸿蒙侧则在IKuiklyViewDelegate的getCustomRenderViewCreatorRegisterMap中返回映射。第四步进阶把 DSL 组件包装成 Compose 组件如果你的业务使用 Kuikly Compose可以通过MakeKuiklyComposeNode一行把 DSL 组件桥接为Composable原子组件如视频、地图继承DeclarativeBaseViewviewName()返回原生组件名容器组件可挂载子节点继承ViewContainer使用带content的容器重载。Composable fun KuiklyCard(modifier: Modifier Modifier, content: Composable () - Unit) { MakeKuiklyComposeNodeKuiklyCard( factory { KuiklyCard() }, modifier modifier, content content ) }⚠️ 注意不能把ComposeView子类传入factory否则布局 frame 无法传递视图将不可见。API 参数详解见extend-kuikly-dsl-ui.md两步总览见extend-native-ui.md。实战示例参考清单官方 Demo 内置了完整可运行的跨端示例建议对照阅读资料路径DSL 组件定义三端对齐MyDemoCustomView.ktAndroid 桥接与注册KRMyDemoCustomView.ktiOS 桥接实现KRMyDemoCustomView.h框架内置组件参考实现core/views/扩展原生 View 官方文档expand-native-ui.md组件市场与生态扩展component_market.md常见问题与最佳实践类名不匹配iOS / 鸿蒙侧的组件名必须与 Kotlin 侧viewName()返回值完全一致否则桥接失败。异步回调View 方法支持传入回调函数异步返回结果但不支持同步返回值。二进制数据View 方法不支持直接传二进制图片等内容请 Base64 编码后以 JSON 传递或改用 Module 方法。覆盖内置组件注册同名viewName即可覆盖框架内置组件Demo 中MyModalView覆盖KRModalView就是这种做法。属性防抖原生侧setProp中建议先比较新旧值再赋值避免重复加载。小结Kuikly 自定义组件扩展的完整流程只有四步定义 DSL 四件套 → 各平台实现桥接 → 注册暴露 → 可选包装为 Compose 组件。借助 KMP 统一代码库一次编写即可在 Android、iOS、鸿蒙、H5 和微信小程序多端复用。跟着 expand-native-ui.md 的示例动手实现第一个自定义组件你将解锁 Kuikly 最强大的平台复用能力。【免费下载链接】KuiklyUI基于KMP技术的高性能、全平台开发框架具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意本仓库为Github仓库镜像PR或Issue请移步至Github发起感谢支持项目地址: https://gitcode.com/Tencent-TDS/KuiklyUI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ARTEMIS 视觉驱动移动端自动化:从架构到实战的完整指南 2026/9/28 21:28:14

ARTEMIS 视觉驱动移动端自动化:从架构到实战的完整指南

移动端自动化这个方向,过去几年一直有个尴尬的瓶颈:脚本能点、能滑、能截图,但一旦界面稍有变化,整套流程就崩了。传统方案靠的是控件树和固定坐标,本质上是在"背答案",而不是"理解题目&quo…

阅读更多 →
FPGA以太网硬件设计:RTL8211F与RGMII接口实战避坑指南 2026/9/28 21:28:14

FPGA以太网硬件设计:RTL8211F与RGMII接口实战避坑指南

1. 为什么RTL8211F在FPGA以太网项目里出镜率这么高搞FPGA以太网通信的兄弟,大概率都绕不开RTL8211F这颗PHY芯片。我第一次用它是在一个图像采集项目里,FPGA端需要把采集到的数据实时传到上位机,千兆带宽是硬指标,选型的时候翻了一…

阅读更多 →
CUDA版本匹配原理:驱动、Toolkit与PyTorch/TensorFlow的ABI兼容性 2026/9/28 21:28:14

CUDA版本匹配原理:驱动、Toolkit与PyTorch/TensorFlow的ABI兼容性

1. 为什么CUDA版本不匹配会直接让PyTorch/TensorFlow“装死”——从GPU驱动到框架ABI的完整断层链你刚配好一台RTX 4060 Laptop GPU的笔记本,兴冲冲跑通了nvidia-smi,显卡状态绿油油,驱动版本显示535.104.05,一切看起来都对。可一…

阅读更多 →
JavaWeb宿舍管理系统实战:从JSP+Servlet+MySQL到部署排错全攻略 2026/9/28 21:28:07

JavaWeb宿舍管理系统实战:从JSP+Servlet+MySQL到部署排错全攻略

简介:基于JSP与Servlet实现的宿舍管理系统,是一份适合JavaWeb课程设计、毕业设计及初学者实战练习的完整项目源码包。系统涵盖用户管理、宿舍分配、资源预订等常见模块,通过典型的MVC分层展示JSP页面、Servlet控制器与后台JavaBean的协作方式…

阅读更多 →
STM32驱动TMC2209 UART通信实战:CRC校验与寄存器读写详解 2026/9/28 21:28:07

STM32驱动TMC2209 UART通信实战:CRC校验与寄存器读写详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
迪文T5L平台C51开发实战:双核架构、DGUS变量地址与工程化避坑指南 2026/9/28 21:28:00

迪文T5L平台C51开发实战:双核架构、DGUS变量地址与工程化避坑指南

1. 迪文T5L平台选型与整体架构拆解1.1 为什么是T5L加C51这套组合第一次接触迪文T5L平台的开发者,最常问的一个问题就是:都什么年代了,为什么还要用C51?我刚开始也有这个疑惑,毕竟现在随便一颗Cortex-M0都比传统8051内核…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉