说明:Android 小程序的自定义 View 功能仅在 mPaaS 10.1.68.29 及以上版本中支持。
升级基线
- 参考 mPaaS 升级指南 升级基线版本至 10.1.68.29 及以上,并添加小程序组件至工程。
- 使用定制的 appx 基础库,代码示例如下:
dependencies {···implementation ('com.mpaas.tinyapp.commonres:tinyappcommonres:1.14.2-beta4.1') {force = true}···}
实现自定义 View
自定义 class 继承 MPBaseEmbedView 并实现 getView 方法,获取 Android View 返回给小程序。
public class MyTestEmbedView extends MPBaseEmbedView {@Overridepublic View getView(int width, int height, String viewId, String mType, Map<String, String> params) {// 返回真正的 Android viewreturn mRealView;}}
注册自定义 View
请在 QuinoxlessFramework 被调用前调用 MPEmbedViewHelper.registerEmbedView 方法注册自定义 View。registerEmbedView 方法无耗时,不会影响启动性能。
MPEmbedViewHelper.registerEmbedView("com.mpaas.demo.nebula.MyTestEmbedView", "custom_map");
注意:
- 参数
"com.mpaas.demo.nebula.MyTestEmbedView"表示自定义 View 的全路径,在 release 时不要混淆。 - 参数 “custom_map” 表示自定义 View 的 type,在小程序侧也需要填写,建议添加上前缀。
小程序调用自定义 View
小程序调用自定义 View 的代码示例如下:
<mpaas-componentid="mpaas-map"type="custom_map"style="{{ width: 200, height: 200 }}"/>
说明:
mpaas-component标签为固定值,请勿修改。id为自定义 View 实例的 ID,单个小程序内请勿重复。type为自定义 View 的 type,和客户端的注册自定义 View 的第三个参数要保持一致,建议加上前缀。style里面输入宽度和高度。
MPBaseEmbedView 的回调
自定义 View 所有回调函数如下:
public class MPBaseEmbedView{/*** 当自定义 View 被实例化时调用,第一个被调用的回调** @param context* @param h5Page*/public void onEmbedViewCreate(Context context, H5Page h5Page) {}/*** 获取嵌入是 View 的实例** @param width 自定义 view 宽* @param height 自定义 view 高* @param viewId 自定义 view 自增 id,可以忽略* @param mType 固定值 "application/view",可以忽略* @param params 参数* @return*/@Overridepublic View getView(int width, int height, String viewId, String mType, Map<String, String> params) {}/*** 当自定义 View 附着在 webview 时回调** @param width 自定义 view 宽* @param height 自定义 view 高* @param viewId 自定义 view 自增 id,可以忽略* @param mType 固定值 "application/view",可以忽略* @param params 参数*/@Overridepublic void onEmbedViewAttachedToWebView(int width, int height, String viewId, String mType, Map<String, String> params) {}/*** 当自定义 View 离开 webview 时回调** @param width 自定义 view 宽* @param height 自定义 view 高* @param viewId 自定义 view 自增 id,可以忽略* @param mType 固定值 "application/view",可以忽略* @param params 参数*/@Overridepublic void onEmbedViewDetachedFromWebView(int width, int height, String viewId, String mType, Map<String, String> params) {}/*** 当自定义 View 销毁时回调** @param width 自定义 view 宽* @param height 自定义 view 高* @param viewId 自定义 view 自增 id,可以忽略* @param mType 固定值 "application/view",可以忽略* @param params 参数*/@Overridepublic void onEmbedViewDestory(int width, int height, String viewId, String mType, Map<String, String> params) {}/*** 当 webview resume 时回调*/@Overridepublic void onWebViewResume() {}/*** 当 webview pause 时回调*/@Overridepublic void onWebViewPause() {}/*** 当 webview destroy 时回调*/@Overridepublic void onWebViewDestory() {}/*** 当接收到小程序端 context 指令时调用** @param actionType 指令名称* @param data 指令参数* @param bridgeContext 回调桥*/@Overridepublic void onReceivedMessage(String actionType, JSONObject data, H5BridgeContext bridgeContext) {}/*** 当自定义 View 创建时的渲染指令** @param data 渲染数据* @param bridgeContext 回调桥,可忽略*/@Overridepublic void onReceivedRender(JSONObject data, H5BridgeContext bridgeContext) {}}
代码示例
Android 代码示例: CustomView。
小程序代码示例: 自定义组件。
该文章对您有帮助吗?