#Weex与Android交互(一)
用Weex开发Android程序
1、创建Android工程
2、集成WeexSDK,参考[WEEX SDK 集成到 Android 工程](https://weex-project.io/cn/doc/advanced/integrate-to-android.html)
3、开发.we源码
4、编译.we源码为js文件,将js文件复制到Android工程的asset目录下
5、初始化sdk
6、实现渲染
WXSample地址 https://github.com/xkli/WXSample.git
Weex扩展到Android(自定义组件)
自定义组件(Android)
1.自定义组件必须继承自 WXComponent 或者 WXContainer ;
2.weex SDK 可以识别 @WXComponentProp (name = value(value 是 attr 或者 dsl style));
3.方法必须是 public 的;
4.组件类不能是一个内部类;
5.自定义组件不能被 ProGuard 之类的工具混淆;
6.组件方法在 UI 线程被调用,因此不要在里面进行耗时的操作;
7.Weex 的参数类型可以是 int, double, float, String, Map, List 和实现了 WXObject 接口的自定义类;
参考以下例子:
package com.taobao.weex.ui.component;
// ……
public class MyViewComponent extends WXComponent{
public MyViewComponent(WXSDKInstance instance, WXDomObject node,
WXVContainer parent, String instanceId, boolean lazy) {
super(instance, node, parent, instanceId, lazy);
}
@Override
protected void initView() {
//TODO:your own code ……
}
@Override
public WXFrameLayout getView() {
//TODO:your own code ………
}
@WXComponentProp(name=WXDomPropConstant.WX_ATTR_VALUE)
public void setMyViewValue(String value) {
((TextView)mHost).setText(value);
}
}
必须注册组件:
WXSDKEngine.registerComponent("MyView", MyViewComponent.class);
自定义原生API
Weex 的 SDK 只提供了页面渲染的能力,但是一些其它操作,比如网络请求、图片加载、重定向等功能需要你自己去实现,这个例子讲述了如何用原生代码去扩展 Weex 的功能。
关于 URLHelper 的例子
新建一个 WXModule
public class URLHelperModule extends WXModule{
private static final String WEEX_CATEGORY="com.taobao.android.intent.category.WEEX";
@JsMethod
public void openURL(String url){
if (TextUtils.isEmpty(url)) {
return;
}
StringBuilder builder=new StringBuilder("http:");
builder.append(url);
Uri uri = Uri.parse(builder.toString());
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory(WEEX_CATEGORY);
mWXSDKInstance.getContext().startActivity(intent);
}
}
这里要注意 @JsMethod 这个注解,它表示了你把这个方法暴露给 JavaScript。
public class URLHelperModule extends WXModule{
@JsMethod
public void openURL(String url,String callbackId){
//...
//callback to javascript
Map<String, Object> result = new HashMap<String, Object>();
result.put("ts", System.currentTimeMillis());
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, result);
}
}
把module注册到WXSDKEngine:
try {
WXSDKEngine.registerModule("myURL", URLHelperModule.class);
//'myURL' is the name you'll use in javascript
} catch (WXException e) {
WXLogUtils.e(e.getMessage());
}
在 JavaScript 中使用 eventModule:
let URLHelper = require('@weex-module/myURL');//same as you registered
URLHelper.openURL("http://www.taobao.com",function(ts){
console.log("url is open at "+ts);
});
一些注意事项:
定义一个 components 需要继承 WXModule
不要忘记添加 @WXModuleAnno 注解,不然 Weex 没法识别这个方法
定义的方法必须是 `public 的
module 类一定不能是内部类
你定义的 components 不能被混淆,不然会找不到
Module 中的方法会在 UI 线程中被调用,所以一定不要做一些耗时操作
Moudle 中的方法参数类型可以为 int,double,float,String,Map,List,以及实现 WXObject 接口的类。
#Weex与Android交互(一)的更多相关文章
- Weex与Android交互(二)
扩展Android Weex 提供了扩展机制,可以根据自己的业务进行定制自己的功能. 主要分为两类扩展: Module 扩展 非UI的特定功能.例如sendHttp.openURL 等. Compon ...
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- js 与 ios Android交互
一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...
- weex 启动 android 模拟器(mac环境)
一.android studio和android sdk下载 1.android studio下载并安装https://developer.android.com/studio/index.html ...
- WebView之javascript与android交互基础加强
一.什么是js与android交互? 通俗一点就是使用js代码调用java代码,或者使用java代码调用js代码. 二.为什么要使用js与java代码交互? 1.可以做一些js网页做本身处理不了的事情 ...
- 使用Struts2服务端与android交互
转自:http://www.cnblogs.com/android-html5/archive/2011/09/25/2534107.html android--使用Struts2服务端与androi ...
- Unity与Android交互实现
主要参考了这篇文章: Unity与Android交互方案优化版 链接:https://www.jianshu.com/p/86b275da600e 自己的实现(unity获取内存和温度): andro ...
- Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity Android交互过坑指南
Unity Android交互过坑指南 介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考 介绍 本次实现的是在游 ...
随机推荐
- IIS短文件名泄露漏洞检测
http://www.xxxx.com/*~1****/a.aspx http://www.xxxx.com/l1j1e*~1****/a.aspx If the first one return a ...
- 引用 自动化测试基础篇--Selenium Python环境搭建
原文链接:https://www.cnblogs.com/sanzangTst/p/7452922.html 鸣谢参藏法师. 学习selenium python需要的工具: 1.浏览器 2.Pytho ...
- 关于“最小的K个数”问题
从一堆无序的数中(共n个数)找到最小的K个数,这也算是一道比较经典的题目了,关于这道题目的解法,一般有几种: 方法1:先对所有的数据进行排序,然后直接找出前K个数来,即最小的K个数.时间复杂度为O(N ...
- bzoj5006: [THUWC2017 Bipartite]随机二分图
某人在玩一个非常神奇的游戏.这个游戏中有一个左右各 nnn 个点的二分图,图中的边会按照一定的规律随机出现. 为了描述这些规律,某人将这些边分到若干个组中.每条边或者不属于任何组 (这样的边一定不会出 ...
- Hive 的基本概念
Hadoop开发存在的问题 只能用java语言开发,如果是c语言或其他语言的程序员用Hadoop,存在语言门槛. 需要对Hadoop底层原理,api比较了解才能做开发. Hive概述 Hive是基于H ...
- Linux下使用curl查看http请求各阶段耗时
1. 准备文件模版(curl.txt) \n time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_ap ...
- [UE4]Cast to转换数据类型
可以转换纯函数,这样就可以不用加执行线了.
- [UE4]条件语句Select
select接收3个参数,输出一个值. 当条件为true时,返回输入到True节点的值. 当条件为false时,返回输入到false节点的值. select的输入和输出参数也可以是整数.float.V ...
- 为什么QQ空间和QQ邮箱都是IE默认打开?
为什么QQ空间和QQ邮箱都是IE默认打开? 我已经设置成chrome为默认浏览器了 原文转载至:https://zhidao.baidu.com/question/390662851068217285 ...
- 0000 - Spring 中常用注解原理剖析
1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...