blob: 601c67503196e4184d6c3f03e219a68dfc0afa7d [file] [log] [blame]
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>扩展 Android 的功能 | WEEX</title>
<meta name="description" content="Weex">
<link rel="icon" href="//gw.alicdn.com/tps/TB1XNqxPXXXXXcSXVXXXXXXXXXX-64-63.png">
<script src="//g.alicdn.com/alilog/mlog/aplus_v2.js"></script>
<meta name="data-spm" dataSpmProtocol="i" content="a2c7j">
<meta name="aplus-ajax" content="chksum">
<meta name="aplus-waiting" content="MAN">
<meta name="google-site-verification" content="FbH8DPHpxdDJlfkKLKXuXWOu69DI8ZRRP8O2Phg8UKw">
<meta name="baidu-site-verification" content="WRr1iWvsYK">
<link rel="preload" href="/assets/css/styles.0ff943f0.css" as="style"><link rel="preload" href="/assets/js/app.0ff943f0.js" as="script"><link rel="preload" href="/assets/js/179.1a3a2c12.js" as="script"><link rel="prefetch" href="/assets/css/1.styles.aa72e838.css"><link rel="prefetch" href="/assets/css/10.styles.1fff5b86.css"><link rel="prefetch" href="/assets/css/11.styles.a03faa50.css"><link rel="prefetch" href="/assets/css/2.styles.fc5d9892.css"><link rel="prefetch" href="/assets/css/21.styles.9ebad2b1.css"><link rel="prefetch" href="/assets/css/3.styles.6b94323a.css"><link rel="prefetch" href="/assets/css/36.styles.6dbb9d8c.css"><link rel="prefetch" href="/assets/css/4.styles.706a5607.css"><link rel="prefetch" href="/assets/css/7.styles.469d3b64.css"><link rel="prefetch" href="/assets/css/8.styles.b36167bf.css"><link rel="prefetch" href="/assets/css/9.styles.5bed6ebe.css"><link rel="prefetch" href="/assets/js/10.1fff5b86.js"><link rel="prefetch" href="/assets/js/100.09076a87.js"><link rel="prefetch" href="/assets/js/101.71fa3538.js"><link rel="prefetch" href="/assets/js/102.8a9926d6.js"><link rel="prefetch" href="/assets/js/103.d6c3649e.js"><link rel="prefetch" href="/assets/js/104.adb2425b.js"><link rel="prefetch" href="/assets/js/105.a063ca34.js"><link rel="prefetch" href="/assets/js/106.620e227f.js"><link rel="prefetch" href="/assets/js/107.1c97d156.js"><link rel="prefetch" href="/assets/js/108.d1f236a9.js"><link rel="prefetch" href="/assets/js/109.10a909cc.js"><link rel="prefetch" href="/assets/js/11.a03faa50.js"><link rel="prefetch" href="/assets/js/110.6f9200c8.js"><link rel="prefetch" href="/assets/js/111.9c1831b3.js"><link rel="prefetch" href="/assets/js/112.e5c0d546.js"><link rel="prefetch" href="/assets/js/113.b1c17feb.js"><link rel="prefetch" href="/assets/js/114.c24b95ed.js"><link rel="prefetch" href="/assets/js/115.d7e38c3b.js"><link rel="prefetch" href="/assets/js/116.1aaa95ab.js"><link rel="prefetch" href="/assets/js/117.1a9e5539.js"><link rel="prefetch" href="/assets/js/118.8d915477.js"><link rel="prefetch" href="/assets/js/119.77f0a126.js"><link rel="prefetch" href="/assets/js/12.16a9b730.js"><link rel="prefetch" href="/assets/js/120.3cf0ba10.js"><link rel="prefetch" href="/assets/js/121.47fefbf1.js"><link rel="prefetch" href="/assets/js/122.3dd022e8.js"><link rel="prefetch" href="/assets/js/123.84abc63f.js"><link rel="prefetch" href="/assets/js/124.2568e233.js"><link rel="prefetch" href="/assets/js/125.5b665f24.js"><link rel="prefetch" href="/assets/js/126.25b58a0a.js"><link rel="prefetch" href="/assets/js/127.d62a58c6.js"><link rel="prefetch" href="/assets/js/128.e5774a02.js"><link rel="prefetch" href="/assets/js/129.9a813c06.js"><link rel="prefetch" href="/assets/js/13.f8bde866.js"><link rel="prefetch" href="/assets/js/130.edddc316.js"><link rel="prefetch" href="/assets/js/131.760aa65c.js"><link rel="prefetch" href="/assets/js/132.559d5ba7.js"><link rel="prefetch" href="/assets/js/133.cbdd35c7.js"><link rel="prefetch" href="/assets/js/134.c02d92e1.js"><link rel="prefetch" href="/assets/js/135.e6d5496a.js"><link rel="prefetch" href="/assets/js/136.8826af60.js"><link rel="prefetch" href="/assets/js/137.28b4573d.js"><link rel="prefetch" href="/assets/js/138.d370fc15.js"><link rel="prefetch" href="/assets/js/139.8d9150fc.js"><link rel="prefetch" href="/assets/js/14.a98602cc.js"><link rel="prefetch" href="/assets/js/140.f0a9b5e1.js"><link rel="prefetch" href="/assets/js/141.297fa6fe.js"><link rel="prefetch" href="/assets/js/142.82bbcbaa.js"><link rel="prefetch" href="/assets/js/143.2d1ed3b2.js"><link rel="prefetch" href="/assets/js/144.69a9bc6a.js"><link rel="prefetch" href="/assets/js/145.74d52c12.js"><link rel="prefetch" href="/assets/js/146.12ecdaf4.js"><link rel="prefetch" href="/assets/js/147.daad4b96.js"><link rel="prefetch" href="/assets/js/148.bb356182.js"><link rel="prefetch" href="/assets/js/149.56fdaace.js"><link rel="prefetch" href="/assets/js/15.ea6e5024.js"><link rel="prefetch" href="/assets/js/150.ee9c4994.js"><link rel="prefetch" href="/assets/js/151.2feae618.js"><link rel="prefetch" href="/assets/js/152.c7703521.js"><link rel="prefetch" href="/assets/js/153.3b555eab.js"><link rel="prefetch" href="/assets/js/154.c6329253.js"><link rel="prefetch" href="/assets/js/155.334c4ea4.js"><link rel="prefetch" href="/assets/js/156.1a29657f.js"><link rel="prefetch" href="/assets/js/157.ba8f07bc.js"><link rel="prefetch" href="/assets/js/158.a60a60ba.js"><link rel="prefetch" href="/assets/js/159.9ce96d49.js"><link rel="prefetch" href="/assets/js/16.14acc638.js"><link rel="prefetch" href="/assets/js/160.2a970224.js"><link rel="prefetch" href="/assets/js/161.a26e2b53.js"><link rel="prefetch" href="/assets/js/162.73535662.js"><link rel="prefetch" href="/assets/js/163.7518a0a5.js"><link rel="prefetch" href="/assets/js/164.17367778.js"><link rel="prefetch" href="/assets/js/165.46c8f055.js"><link rel="prefetch" href="/assets/js/166.1cc22037.js"><link rel="prefetch" href="/assets/js/167.3fbcb5c6.js"><link rel="prefetch" href="/assets/js/168.a3f80f1e.js"><link rel="prefetch" href="/assets/js/169.a6565c29.js"><link rel="prefetch" href="/assets/js/17.d6f2f3b8.js"><link rel="prefetch" href="/assets/js/170.566ddeda.js"><link rel="prefetch" href="/assets/js/171.4fd97bee.js"><link rel="prefetch" href="/assets/js/172.5295c6b9.js"><link rel="prefetch" href="/assets/js/173.ff25fd05.js"><link rel="prefetch" href="/assets/js/174.22ea6a1b.js"><link rel="prefetch" href="/assets/js/175.c6a04367.js"><link rel="prefetch" href="/assets/js/176.d3810924.js"><link rel="prefetch" href="/assets/js/177.facd2802.js"><link rel="prefetch" href="/assets/js/178.f4c6fbe9.js"><link rel="prefetch" href="/assets/js/18.83f6b39a.js"><link rel="prefetch" href="/assets/js/180.b54c8e90.js"><link rel="prefetch" href="/assets/js/181.88495b4c.js"><link rel="prefetch" href="/assets/js/182.8341d23c.js"><link rel="prefetch" href="/assets/js/183.332bcfe2.js"><link rel="prefetch" href="/assets/js/184.d8996a56.js"><link rel="prefetch" href="/assets/js/185.b8584f07.js"><link rel="prefetch" href="/assets/js/186.fa89e23f.js"><link rel="prefetch" href="/assets/js/187.90340eeb.js"><link rel="prefetch" href="/assets/js/188.efe631f8.js"><link rel="prefetch" href="/assets/js/189.72897b1a.js"><link rel="prefetch" href="/assets/js/19.94f071c0.js"><link rel="prefetch" href="/assets/js/190.1ec691ee.js"><link rel="prefetch" href="/assets/js/2.fc5d9892.js"><link rel="prefetch" href="/assets/js/20.13f7bbff.js"><link rel="prefetch" href="/assets/js/21.9ebad2b1.js"><link rel="prefetch" href="/assets/js/22.764b643d.js"><link rel="prefetch" href="/assets/js/23.f533737e.js"><link rel="prefetch" href="/assets/js/24.4eaa533c.js"><link rel="prefetch" href="/assets/js/25.e9877e57.js"><link rel="prefetch" href="/assets/js/26.8905d6a0.js"><link rel="prefetch" href="/assets/js/27.b199a955.js"><link rel="prefetch" href="/assets/js/28.524af0cf.js"><link rel="prefetch" href="/assets/js/29.b772949f.js"><link rel="prefetch" href="/assets/js/3.6b94323a.js"><link rel="prefetch" href="/assets/js/30.f5bcac64.js"><link rel="prefetch" href="/assets/js/31.c55e03aa.js"><link rel="prefetch" href="/assets/js/32.e575600a.js"><link rel="prefetch" href="/assets/js/33.3fff5656.js"><link rel="prefetch" href="/assets/js/34.82598567.js"><link rel="prefetch" href="/assets/js/35.8e1290ba.js"><link rel="prefetch" href="/assets/js/36.6dbb9d8c.js"><link rel="prefetch" href="/assets/js/37.d27fdc88.js"><link rel="prefetch" href="/assets/js/38.f8fc7b20.js"><link rel="prefetch" href="/assets/js/39.bf967d40.js"><link rel="prefetch" href="/assets/js/4.706a5607.js"><link rel="prefetch" href="/assets/js/40.e1864fd6.js"><link rel="prefetch" href="/assets/js/41.61bd3b64.js"><link rel="prefetch" href="/assets/js/42.34d8d61d.js"><link rel="prefetch" href="/assets/js/43.1aee493f.js"><link rel="prefetch" href="/assets/js/44.22177e9b.js"><link rel="prefetch" href="/assets/js/45.5c743d2f.js"><link rel="prefetch" href="/assets/js/46.4feffac9.js"><link rel="prefetch" href="/assets/js/47.367f9103.js"><link rel="prefetch" href="/assets/js/48.0c246d45.js"><link rel="prefetch" href="/assets/js/49.ee354be9.js"><link rel="prefetch" href="/assets/js/5.7d9779f7.js"><link rel="prefetch" href="/assets/js/50.bd81c7f0.js"><link rel="prefetch" href="/assets/js/51.a5f432dd.js"><link rel="prefetch" href="/assets/js/52.537aded4.js"><link rel="prefetch" href="/assets/js/53.84814584.js"><link rel="prefetch" href="/assets/js/54.5f780e97.js"><link rel="prefetch" href="/assets/js/55.9d44c91d.js"><link rel="prefetch" href="/assets/js/56.fc164b43.js"><link rel="prefetch" href="/assets/js/57.959b2d44.js"><link rel="prefetch" href="/assets/js/58.bd5c38e0.js"><link rel="prefetch" href="/assets/js/59.3eaece52.js"><link rel="prefetch" href="/assets/js/6.49a49457.js"><link rel="prefetch" href="/assets/js/60.4b8cb735.js"><link rel="prefetch" href="/assets/js/61.b54b9195.js"><link rel="prefetch" href="/assets/js/62.0116614c.js"><link rel="prefetch" href="/assets/js/63.85b1247d.js"><link rel="prefetch" href="/assets/js/64.8f1be6b5.js"><link rel="prefetch" href="/assets/js/65.6a241647.js"><link rel="prefetch" href="/assets/js/66.08c8bd13.js"><link rel="prefetch" href="/assets/js/67.002e0071.js"><link rel="prefetch" href="/assets/js/68.6c6a7c94.js"><link rel="prefetch" href="/assets/js/69.64d90e5d.js"><link rel="prefetch" href="/assets/js/7.469d3b64.js"><link rel="prefetch" href="/assets/js/70.b2c287c9.js"><link rel="prefetch" href="/assets/js/71.b7ad1135.js"><link rel="prefetch" href="/assets/js/72.7391b5c2.js"><link rel="prefetch" href="/assets/js/73.c5c77d81.js"><link rel="prefetch" href="/assets/js/74.96f80ffd.js"><link rel="prefetch" href="/assets/js/75.2920c7b7.js"><link rel="prefetch" href="/assets/js/76.a90bd3c9.js"><link rel="prefetch" href="/assets/js/77.3a0eeccd.js"><link rel="prefetch" href="/assets/js/78.6791678c.js"><link rel="prefetch" href="/assets/js/79.8b0c78e4.js"><link rel="prefetch" href="/assets/js/8.b36167bf.js"><link rel="prefetch" href="/assets/js/80.2641b89d.js"><link rel="prefetch" href="/assets/js/81.03d1925e.js"><link rel="prefetch" href="/assets/js/82.71061708.js"><link rel="prefetch" href="/assets/js/83.df220a8f.js"><link rel="prefetch" href="/assets/js/84.99fbef8f.js"><link rel="prefetch" href="/assets/js/85.dee8bcae.js"><link rel="prefetch" href="/assets/js/86.5200e4ce.js"><link rel="prefetch" href="/assets/js/87.96df0d82.js"><link rel="prefetch" href="/assets/js/88.e9171a32.js"><link rel="prefetch" href="/assets/js/89.53987bbc.js"><link rel="prefetch" href="/assets/js/9.5bed6ebe.js"><link rel="prefetch" href="/assets/js/90.8da0ff06.js"><link rel="prefetch" href="/assets/js/91.4bcce2cd.js"><link rel="prefetch" href="/assets/js/92.aca18707.js"><link rel="prefetch" href="/assets/js/93.93fdf568.js"><link rel="prefetch" href="/assets/js/94.e893b256.js"><link rel="prefetch" href="/assets/js/95.cb1d62b6.js"><link rel="prefetch" href="/assets/js/96.5529545c.js"><link rel="prefetch" href="/assets/js/97.d01eda68.js"><link rel="prefetch" href="/assets/js/98.384bebd6.js"><link rel="prefetch" href="/assets/js/99.fa349b8f.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.aa72e838.js">
<link rel="stylesheet" href="/assets/css/styles.0ff943f0.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container vuepress-theme-fast"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div><a href="/zh/" class="home-link router-link-active"><img src="/logo@2x.svg" alt="WEEX" class="logo"></a><span class="version"><a href="/download/download.html" class="version-bg"><img src="/assets/img/version-bg.ab65ded9.svg" alt="v0.28"><span class="version-no">v0.28</span></a></span><div class="links"><form id="search-form" class="algolia-search-wrapper search-box"><input id="algolia-search-input" class="search-query"></form><nav class="nav-links can-hide"><div class="nav-item"><a href="/zh/guide/" class="nav-link router-link-active">指南</a></div><div class="nav-item"><a href="/zh/docs/" class="nav-link">文档</a></div><div class="nav-item"><a href="/zh/tools/" class="nav-link">第三方工具</a></div><div class="nav-item"><a href="/zh/download/" class="nav-link">下载</a></div><div class="nav-item"><a href="/zh/community/" class="nav-link">社区</a></div><div class="nav-item"><a href="/zh/blog/" class="nav-link">博客</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">选择语言</span><span class="arrow right"></span></a><ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----><a href="/guide/extend/extend-android.html" class="nav-link">English</a></li><li class="dropdown-item"><!----><a href="/zh/guide/extend/extend-android.html" class="nav-link router-link-exact-active router-link-active">简体中文</a></li></ul></div></div></nav><a href="https://github.com/apache/incubator-weex" target="_blank" rel="noopener noreferrer" class="repo-link"><img src="/assets/img/github.7cb484a9.svg" alt="github" class="github-icon"></a></div></header><div class="sidebar-mask"></div><div class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/zh/guide/" class="nav-link router-link-active">指南</a></div><div class="nav-item"><a href="/zh/docs/" class="nav-link">文档</a></div><div class="nav-item"><a href="/zh/tools/" class="nav-link">第三方工具</a></div><div class="nav-item"><a href="/zh/download/" class="nav-link">下载</a></div><div class="nav-item"><a href="/zh/community/" class="nav-link">社区</a></div><div class="nav-item"><a href="/zh/blog/" class="nav-link">博客</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">选择语言</span><span class="arrow right"></span></a><ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----><a href="/guide/extend/extend-android.html" class="nav-link">English</a></li><li class="dropdown-item"><!----><a href="/zh/guide/extend/extend-android.html" class="nav-link router-link-exact-active router-link-active">简体中文</a></li></ul></div></div></nav><ul class="sidebar-links"><li><div class="sidebar-group first"><p class="sidebar-heading"><span>快速上手</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/introduction.html" class="sidebar-link">简介</a></li><li><a href="/zh/guide/front-end-frameworks.html" class="sidebar-link">前端框架</a></li><li><a href="/zh/guide/platform-difference.html" class="sidebar-link">平台差异</a></li><li><a href="/zh/guide/use-vue-in-weex.html" class="sidebar-link">在Weex中使用Vue.js</a></li><li><a href="/zh/guide/use-rax-in-weex.html" class="sidebar-link">在Weex中使用Rax.js</a></li><li><a href="/zh/guide/playground.html" class="sidebar-link">Playground 应用</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>开发</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/develop/setup-develop-environment.html" class="sidebar-link">设置开发环境</a></li><li><a href="/zh/guide/develop/create-a-new-app.html" class="sidebar-link">创建一个新的app</a></li><li><a href="/zh/guide/develop/weex_cli.html" class="sidebar-link">Weex CLI</a></li><li><a href="/zh/guide/develop/integrate-to-android-app.html" class="sidebar-link">集成到Android应用</a></li><li><a href="/zh/guide/develop/integrate-to-iOS-app.html" class="sidebar-link">集成到iOS应用</a></li><li><a href="/zh/guide/develop/weex_error_code.html" class="sidebar-link">WEEX常见错误码</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>调试</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/debug/integrate-devtool-to-android.html" class="sidebar-link">集成Devtool到Android</a></li><li><a href="/zh/guide/debug/integrate-devtool-to-ios.html" class="sidebar-link">集成Devtool到iOS</a></li><li><a href="/zh/guide/debug/debug.html" class="sidebar-link">调试</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading open"><span>扩展</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/extend/extend-android.html" class="active sidebar-link">扩展Android能力</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#jsenv-扩展" class="sidebar-link">JSEnv 扩展</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#module-扩展" class="sidebar-link">Module 扩展</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#module-注册" class="sidebar-link">Module 注册</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#component-扩展" class="sidebar-link">Component 扩展</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#component-注册" class="sidebar-link">Component 注册</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#adapter-扩展" class="sidebar-link">Adapter 扩展</a></li><li class="sidebar-sub-header"><a href="/zh/guide/extend/extend-android.html#adapter-注册" class="sidebar-link">Adapter 注册</a></li></ul></li><li><a href="/zh/guide/extend/extend-ios.html" class="sidebar-link">扩展iOS能力</a></li><li><a href="/zh/guide/extend/extend-ios-with-swift.html" class="sidebar-link">使用Swift扩展iOS能力</a></li><li><a href="/zh/guide/extend/extend-web.html" class="sidebar-link">扩展Web组件</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>高阶特性</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/advanced/asset-path.html" class="sidebar-link">资源路径</a></li><li><a href="/zh/guide/advanced/downgrade.html" class="sidebar-link">降级方案</a></li><li><a href="/zh/guide/advanced/use-vuex-and-vue-router.html" class="sidebar-link">使用Vuex和vue-router</a></li><li><a href="/zh/guide/advanced/multi-size-screen.html" class="sidebar-link">适应不同尺寸屏幕</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>贡献</span><!----></p><ul class="sidebar-group-items"><li><a href="/zh/guide/contribute/how-to-contribute.html" class="sidebar-link">加入 Weex 社区</a></li><li><a href="/zh/guide/contribute/thanks.html" class="sidebar-link">鸣谢</a></li></ul></div></li></ul></div><div class="page"><div class="content"><p>Weex 提供了扩展机制,可以根据自己的业务进行定制自己的功能。
主要分为两类扩展:</p><ul><li>Module 扩展 非 UI 的特定功能。例如 sendHttp、openURL 等。</li><li>Component 扩展 实现特别功能的 Native 控件。例如:RichTextview,RefreshListview 等。</li><li>Adapter 扩展 Weex 对一些基础功能实现了统一的接口,可实现这些接口来定制自己的业务。例如:图片下载等。</li><li>JS全局变量自定义扩展</li></ul><h2 id="jsenv-扩展"><a href="#jsenv-扩展" class="header-anchor">#</a> JSEnv 扩展</h2><h3 id="接口"><a href="#接口" class="header-anchor">#</a> 接口</h3><div class="language- extra-class"><pre class="language-text"><code>
Map&lt;String, Object&gt; options = new HashMap();
options.set(&quot;testVlaue&quot;,&quot;hello&quot;);
//....
instance.render(pagename, template,options);
</code></pre></div><h3 id="使用"><a href="#使用" class="header-anchor">#</a> 使用</h3><div class="language- extra-class"><pre class="language-text"><code>var value = weex.config.testValue;
console.log(value);
</code></pre></div><h2 id="module-扩展"><a href="#module-扩展" class="header-anchor">#</a> Module 扩展</h2><ol><li>Module 扩展必须继承 WXModule 类。</li><li>扩展方法必须加上<code>@JSMethod (uiThread = false or true)</code> 注解。Weex 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。</li><li>Weex是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。</li><li>同样因为是通过反射调用,Module 不能被混淆。请在混淆文件中添加代码:<code>-keep public class * extends com.taobao.weex.common.WXModule{*;}</code></li><li>Module 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数</li><li>完成 Module 后一定要在初始化时注册 <code>WXSDKEngine.registerModule(&quot;myModule&quot;, MyModule.class);</code> 否则会报类似错误:<code>ReportException :undefined:9: TypeError: Object #&lt;Object&gt; has no method 'printLog'</code></li></ol><p>示例如下:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MyModule</span> <span class="token keyword">extends</span> <span class="token class-name">WXModule</span> <span class="token punctuation">{</span>
<span class="token comment">//run ui thread</span>
<span class="token annotation punctuation">@JSMethod</span> <span class="token punctuation">(</span>uiThread <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">printLog</span><span class="token punctuation">(</span><span class="token class-name">String</span> msg<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Toast</span><span class="token punctuation">.</span><span class="token function">makeText</span><span class="token punctuation">(</span>mWXSDKInstance<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>msg<span class="token punctuation">,</span><span class="token class-name">Toast</span><span class="token punctuation">.</span>LENGTH_SHORT<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">show</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//run JS thread</span>
<span class="token annotation punctuation">@JSMethod</span> <span class="token punctuation">(</span>uiThread <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">fireEventSyncCall</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//implement your module logic here</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Register the module</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token class-name">WXSDKEngine</span><span class="token punctuation">.</span><span class="token function">registerModule</span><span class="token punctuation">(</span><span class="token string">&quot;MyModule&quot;</span><span class="token punctuation">,</span> <span class="token class-name">MyModule</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>JS 调用如下:</p><div class="language-html extra-class"><pre class="language-html"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>text</span> <span class="token attr-name">onclick</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>click<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>testMyModule<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>text</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
methods<span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token function-variable function">click</span><span class="token punctuation">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
weex<span class="token punctuation">.</span><span class="token function">requireModule</span><span class="token punctuation">(</span><span class="token string">'MyModule'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">printLog</span><span class="token punctuation">(</span><span class="token string">&quot;I am a weex Module&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h2 id="module-注册"><a href="#module-注册" class="header-anchor">#</a> Module 注册</h2><p>registerModule(moduleName,moduleClass)</p><ul><li><code>return</code>(<em>bool</em>): 是否注册成功</li><li><code>moduleName</code>(<em>String</em>): 模块名称</li><li><code>moduleClass</code>(<em>Class</em>): 模块对应的class,创建module实例时使用</li></ul><p>使用方式:</p><div class="language- extra-class"><pre class="language-text"><code>WXSDKEngine.registerModule(&quot;picker&quot;, WXPickersModule.class);
</code></pre></div><h2 id="component-扩展"><a href="#component-扩展" class="header-anchor">#</a> Component 扩展</h2><h3 id="wee-x版本-0-19-0"><a href="#wee-x版本-0-19-0" class="header-anchor">#</a> wee x版本 &gt;= 0.19.0</h3><h4 id="变更说明"><a href="#变更说明" class="header-anchor">#</a> 变更说明</h4><p>WXDomObject 和 Layout 引擎被下沉到 WeexCore 中使用 C++ 实现,移除 Java 代码中的 WXDomObject。此次变更涉及 WXComponent 和 WXDomObject 的适配。</p><h4 id="迁移指南"><a href="#迁移指南" class="header-anchor">#</a> 迁移指南</h4><h5 id="setmeasurefunction-迁移"><a href="#setmeasurefunction-迁移" class="header-anchor">#</a> setMeasureFunction 迁移</h5><p>WXDomObject 中的 setMeasureFunction() 方法迁移至 WXComponent 中:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">setMeasureFunction</span><span class="token punctuation">(</span><span class="token keyword">final</span> <span class="token class-name">ContentBoxMeasurement</span> contentBoxMeasurement<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>详见:com.taobao.weex.layout.ContentBoxMeasurement.java</p><p>ContentBoxMeasurement 示例请参考:WXText.java / setMeasureFunction()
注意:ContentBoxMeasurement 只支持叶子节点。</p><h5 id="wxcomponent-接口变更"><a href="#wxcomponent-接口变更" class="header-anchor">#</a> WXComponent 接口变更</h5><h6 id="getdomobject-移除"><a href="#getdomobject-移除" class="header-anchor">#</a> getDomObject [移除]</h6><p>由于 WXDomObject 下沉至 WeexCore 中,所以 getDomObject() 方法已被删除。</p><h6 id="构造方法-参数变更"><a href="#构造方法-参数变更" class="header-anchor">#</a> 构造方法 [参数变更]</h6><p>WXComponent 的构造方法删除了类型为 WXDomObject 的参数,新增了类型为 BasicComponentData 的参数,其余参数保持不变:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token class-name">WXComponent</span><span class="token punctuation">(</span><span class="token class-name">WXSDKInstance</span> instance<span class="token punctuation">,</span> <span class="token class-name">WXVContainer</span> parent<span class="token punctuation">,</span> <span class="token keyword">int</span> type<span class="token punctuation">,</span> <span class="token class-name">BasicComponentData</span> basicComponentData<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token class-name">WXComponent</span><span class="token punctuation">(</span><span class="token class-name">WXSDKInstance</span> instance<span class="token punctuation">,</span> <span class="token class-name">WXVContainer</span> parent<span class="token punctuation">,</span> <span class="token class-name">BasicComponentData</span> basicComponentData<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><h5 id="wxdomobject-接口变更"><a href="#wxdomobject-接口变更" class="header-anchor">#</a> WXDomObject 接口变更</h5><p>你无法在Java代码中访问和继承 WXDomObject,( ImmutableDomObject 接口也已被删除)</p><p>WXDomObject 的部分方法被迁移至 WXComponent中,如需使用,如下:</p><h6 id="wxdomobject-gettype-wxcomponent-getcomponenttype-迁移"><a href="#wxdomobject-gettype-wxcomponent-getcomponenttype-迁移" class="header-anchor">#</a> WXDomObject.getType() -&gt; WXComponent.getComponentType() [迁移]</h6><p>WXDomObject 中 的 getType() 方法用于获取组件类型(如:list、div、text、img...),迁移到 WXComponent 后,更名为:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getComponentType</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><h6 id="获取-layout-结果的相关方法-迁移"><a href="#获取-layout-结果的相关方法-迁移" class="header-anchor">#</a> 获取 Layout 结果的相关方法 [迁移]</h6><p>获取 Layout 结果的6个方法从 WXDomObject 迁移至 WXComponent:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getCSSLayoutTop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getCSSLayoutBottom</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getCSSLayoutLeft</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getCSSLayoutRight</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getLayoutWidth</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getLayoutHeight</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>移除两个废弃接口:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getLayoutY</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">float</span> <span class="token function">getLayoutX</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><h3 id="weex-sdk-版本-0-19-0"><a href="#weex-sdk-版本-0-19-0" class="header-anchor">#</a> weex_sdk 版本 &lt; 0.19.0</h3><ol><li>Component 扩展类必须继承 WXComponent.</li><li>Component 对应的设置属性的方法必须添加注解 @WXComponentProp(name=value(value is attr or style of dsl))</li><li>Weex sdk 通过反射调用对应的方法,所以 Component 对应的属性方法必须是 public,并且不能被混淆。请在混淆文件中添加代码 <code>-keep public class * extends com.taobao.weex.ui.component.WXComponent{*;}</code></li><li>Component 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数</li><li>完成 Component 后一定要在初始化时注册 <code>WXSDKEngine.registerComponent(&quot;richText&quot;, RichText.class);</code></li></ol><p>示例如下:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RichText</span> <span class="token keyword">extends</span> <span class="token class-name">WXComponent</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">TextView</span><span class="token punctuation">&gt;</span></span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token class-name">RichText</span><span class="token punctuation">(</span><span class="token class-name">WXSDKInstance</span> instance<span class="token punctuation">,</span> <span class="token class-name">WXDomObject</span> dom<span class="token punctuation">,</span> <span class="token class-name">WXVContainer</span> parent<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">super</span><span class="token punctuation">(</span>instance<span class="token punctuation">,</span> dom<span class="token punctuation">,</span> parent<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">protected</span> <span class="token class-name">TextView</span> <span class="token function">initComponentHostView</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> <span class="token class-name">Context</span> context<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">TextView</span> textView <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TextView</span><span class="token punctuation">(</span>context<span class="token punctuation">)</span><span class="token punctuation">;</span>
textView<span class="token punctuation">.</span><span class="token function">setTextSize</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
textView<span class="token punctuation">.</span><span class="token function">setTextColor</span><span class="token punctuation">(</span><span class="token class-name">Color</span><span class="token punctuation">.</span>BLACK<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> textView<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@WXComponentProp</span><span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">&quot;tel&quot;</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setTel</span><span class="token punctuation">(</span><span class="token class-name">String</span> telNumber<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">getHostView</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">&quot;tel: &quot;</span> <span class="token operator">+</span> telNumber<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>注册你的组件:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token class-name">WXSDKEngine</span><span class="token punctuation">.</span><span class="token function">registerComponent</span><span class="token punctuation">(</span><span class="token string">&quot;richText&quot;</span><span class="token punctuation">,</span> <span class="token class-name">RichText</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>JS 调用如下:</p><div class="language-html extra-class"><pre class="language-html"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>richText</span> <span class="token attr-name">tel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>12305<span class="token punctuation">&quot;</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">=&quot;</span><span class="token attr-value"><span class="token property">width</span><span class="token punctuation">:</span>200<span class="token punctuation">;</span><span class="token property">height</span><span class="token punctuation">:</span>100</span><span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>12305<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>richText</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h4 id="组件方法支持"><a href="#组件方法支持" class="header-anchor">#</a> 组件方法支持</h4><p>从WeexSDK 0.9.5开始,你可以定义组件方法</p><ul><li>在组件中如下声明一个组件方法</li></ul><div class="language-java extra-class"><pre class="language-java"><code><span class="token annotation punctuation">@JSMethod</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">focus</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//method implementation</span>
<span class="token punctuation">}</span>
</code></pre></div><ul><li><p>注册组之后,你可以在weex 文件中调用</p><div class="language-html extra-class"><pre class="language-html"><code> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mycomponent</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>mycomponent<span class="token punctuation">'</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mycomponent</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token function-variable function">created</span><span class="token punctuation">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>$refs<span class="token punctuation">.</span>mycomponent<span class="token punctuation">.</span><span class="token function">focus</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre></div></li></ul><p>注:工程要添加依赖 <code>compile 'com.squareup.picasso:picasso:2.5.2'</code></p><h2 id="component-注册"><a href="#component-注册" class="header-anchor">#</a> Component 注册</h2><h3 id="registercomponent-type-class-appendtree"><a href="#registercomponent-type-class-appendtree" class="header-anchor">#</a><strong>registerComponent(type,class,appendTree)</strong></h3><ul><li><code>return</code>(<em>bool</em>): 是否注册成功</li><li><code>type</code>(<em>String</em>): 前端使用的对应标签</li><li><code>class</code>(<em>Class</em>): 组件的class,在创建组件实例时调用</li><li><code>appendTree</code>(<em>bool</em>): 渲染时判定逻辑,默认false
<ul><li>如果为true,则这个组件的子组件,整颗树建立、layout完后,整体一起刷新。</li><li>如果为false,则这个组件的子组件,每add一个,刷新一个。</li></ul></li></ul><p>使用方式:</p><div class="language- extra-class"><pre class="language-text"><code>WXSDKEngine.registerComponent(&quot;video&quot;, WXVideo.class, false);
</code></pre></div><h3 id="registercomponent-holder-appendtree,-names"><a href="#registercomponent-holder-appendtree,-names" class="header-anchor">#</a><strong>registerComponent(holder,appendTree,...names)</strong></h3><ul><li><code>return</code>(<em>bool</em>): 是否注册成功</li><li><code>holder</code>(<em>IFComponentHolder</em>): 用于创建component的抽象工厂,默认使用__SimpleComponentHolder__。</li><li><code>appendTree</code>: 同上</li><li><code>names</code>(<em>String ...</em>): 前端使用的对应标签</li></ul><p>使用方式:</p><div class="language- extra-class"><pre class="language-text"><code>WXSDKEngine.registerComponent(
new SimpleComponentHolder(
WXText.class,
new WXText.Creator()
),
false,
&quot;text&quot;
);
</code></pre></div><h2 id="adapter-扩展"><a href="#adapter-扩展" class="header-anchor">#</a> Adapter 扩展</h2><h3 id="图片库adapter"><a href="#图片库adapter" class="header-anchor">#</a> 图片库Adapter</h3><p>需要时集成接口 IWXImgLoaderAdapter,实现 setImage 方法。</p><p>示例如下:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ImageAdapter</span> <span class="token keyword">implements</span> <span class="token class-name">IWXImgLoaderAdapter</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token class-name">ImageAdapter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setImage</span><span class="token punctuation">(</span><span class="token keyword">final</span> <span class="token class-name">String</span> url<span class="token punctuation">,</span> <span class="token keyword">final</span> <span class="token class-name">ImageView</span> view<span class="token punctuation">,</span>
<span class="token class-name">WXImageQuality</span> quality<span class="token punctuation">,</span> <span class="token class-name">WXImageStrategy</span> strategy<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">WXSDKManager</span><span class="token punctuation">.</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">postOnUiThread</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Runnable</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span><span class="token punctuation">(</span>view<span class="token operator">==</span><span class="token keyword">null</span><span class="token operator">||</span>view<span class="token punctuation">.</span><span class="token function">getLayoutParams</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">==</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name">TextUtils</span><span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>url<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
view<span class="token punctuation">.</span><span class="token function">setImageBitmap</span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">String</span> temp <span class="token operator">=</span> url<span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>url<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span><span class="token string">&quot;//&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
temp <span class="token operator">=</span> <span class="token string">&quot;http:&quot;</span> <span class="token operator">+</span> url<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>view<span class="token punctuation">.</span><span class="token function">getLayoutParams</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>width <span class="token operator">&lt;=</span> <span class="token number">0</span> <span class="token operator">||</span> view<span class="token punctuation">.</span><span class="token function">getLayoutParams</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>height <span class="token operator">&lt;=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">Picasso</span><span class="token punctuation">.</span><span class="token keyword">with</span><span class="token punctuation">(</span><span class="token class-name">WXEnvironment</span><span class="token punctuation">.</span><span class="token function">getApplication</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">load</span><span class="token punctuation">(</span>temp<span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">into</span><span class="token punctuation">(</span>view<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="adapter-注册"><a href="#adapter-注册" class="header-anchor">#</a> Adapter 注册</h2><h3 id="imageadapter"><a href="#imageadapter" class="header-anchor">#</a> ImageAdapter</h3><p><strong>WEEX和图片库完全解耦</strong>,WEEX的图片加载,都是通过调用公共接口,由实现类决定调用哪个图片库</p><ul><li><code>IWXImgLoaderAdapter</code>: 根据url,load图片给某个view</li><li><code>IDrawableLoader</code>(可选): 根据url,load图片给某个drawable.</li></ul><h4 id="iwximgloaderadapter"><a href="#iwximgloaderadapter" class="header-anchor">#</a> IWXImgLoaderAdapter</h4><div class="language- extra-class"><pre class="language-text"><code>public interface IWXImgLoaderAdapter {
void setImage(String url, ImageView view, WXImageQuality quality, WXImageStrategy strategy);
}
</code></pre></div><ul><li><code>WXImageQuality</code> 图片质量的设置参数,有 <code>LOW</code>, <code>NORMAL</code>, <code>HIGH</code>, <code>ORIGINAL</code> 几种质量,默认为<code>LOW</code>.</li><li><code>WXImageStrategy</code> 是一个扩展类参数,配置图像是否可以剪切<code>isClipping</code>、锐化<code>isSharpen</code>以及配置占位符<code>placeHolder</code></li></ul><h4 id="idrawableloader-可选"><a href="#idrawableloader-可选" class="header-anchor">#</a> IDrawableLoader(可选)</h4><div class="language- extra-class"><pre class="language-text"><code> interface DrawableTarget {
}
interface StaticTarget extends DrawableTarget{
void setDrawable(@Nullable Drawable drawable, boolean resetBounds);
}
interface AnimatedTarget extends DrawableTarget{
void setAnimatedDrawable(@Nullable Drawable drawable);
}
void setDrawable(String url, DrawableTarget drawableTarget, DrawableStrategy drawableStrategy);
}
</code></pre></div><h3 id="iwxhttpadapter"><a href="#iwxhttpadapter" class="header-anchor">#</a> IWXHttpAdapter</h3><p><code>ImageAdapter</code>,<strong>WEEX和网络库也是解耦的</strong>,通过接口形式调用,由实现类决定调用哪个网络库。</p><div class="language- extra-class"><pre class="language-text"><code>public interface IWXHttpAdapter {
void sendRequest(WXRequest request, OnHttpListener listener);
}
</code></pre></div><h4 id="wxrequest"><a href="#wxrequest" class="header-anchor">#</a> WXRequest</h4><ul><li><code>paramMap</code>(<em>Map&lt;String, String&gt;</em>): http自定义请求参数,比如(?a=1&amp;b=2);</li><li><code>url</code>(<em>String</em>): http请求的目标url</li><li><code>method</code>(<em>String</em>): http请求方法 &quot;post&quot;,&quot;get&quot;</li><li><code>body</code>(<em>String</em>): http请求body</li><li><code>timeoutMs</code>(<em>int</em>): 请求超时时间,<strong>默认是3s</strong></li><li><code>instanceId</code>(<em>String</em>): (页面)id</li></ul><h4 id="onhttplistener"><a href="#onhttplistener" class="header-anchor">#</a> OnHttpListener</h4><div class="language- extra-class"><pre class="language-text"><code>interface OnHttpListener {
/**
* 开始请求
*/
void onHttpStart();
/**
* 收到http header内容
*/
void onHeadersReceived(int statusCode,Map&lt;String,List&lt;String&gt;&gt; headers);
/**
*
* @param 上传进度
*/
void onHttpUploadProgress(int uploadProgress);
/**
*
* @param loadedLength 接收到的数据长度
*/
void onHttpResponseProgress(int loadedLength);
/**
* 请求结束
* @param response 返回的response
*/
void onHttpFinish(WXResponse response);
}
</code></pre></div><h3 id="iwxusertrackadapter-可选"><a href="#iwxusertrackadapter-可选" class="header-anchor">#</a> IWXUserTrackAdapter(可选)</h3><p>打点相关,如果关注weex的打点,需要实现这个adapter</p><ul><li>基础信息:sdk版本、jsbundle大小...</li><li>性能信息:sdk初始化时间、页面加载可交互时间、加载bundle时间...</li></ul><div class="language- extra-class"><pre class="language-text"><code>public interface IWXUserTrackAdapter {
void commit(Context context, String eventId, String type, WXPerformance perf, Map&lt;String, Serializable&gt; params);
}
</code></pre></div><h3 id="iactivitynavbarsetter"><a href="#iactivitynavbarsetter" class="header-anchor">#</a> IActivityNavBarSetter</h3><p><code>WXNavigatorModule</code>的实现依赖这个接口,用来操作navigation.</p><p>使用方式:</p><div class="language- extra-class"><pre class="language-text"><code>WXSDKEngine.setActivityNavBarSetter(new IActivityNavBarSetter(){});
</code></pre></div><h3 id="iwxstorageadapter"><a href="#iwxstorageadapter" class="header-anchor">#</a> IWXStorageAdapter</h3><p><code>WXStorageModule</code>实现依赖这个接口,用来实现数据的存、取默认使用<code>DefaultWXStorage</code>实现</p><h3 id="iwxjsexceptionadapter"><a href="#iwxjsexceptionadapter" class="header-anchor">#</a> IWXJSExceptionAdapter</h3><p>WEEX的异常上报接口,包括</p><ul><li>下载异常</li><li>白屏异常</li><li>js异常</li><li>降级异常</li></ul><div class="language- extra-class"><pre class="language-text"><code>public interface IWXJSExceptionAdapter {
void onJSException(WXJSExceptionInfo exception);
}
</code></pre></div><p>使用方式:</p><div class="language- extra-class"><pre class="language-text"><code>WXSDKEngine.setJSExcetptionAdapter(new TestExceptionAdapter());
</code></pre></div><h4 id="sdk混淆规则"><a href="#sdk混淆规则" class="header-anchor">#</a> SDK混淆规则</h4><p>若要在APP中使用混淆,请在相应的配置文件中添加如下规则:</p><div class="language-java extra-class"><pre class="language-java"><code><span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span><span class="token class-name">WXDebugTool</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>devtools<span class="token punctuation">.</span>common<span class="token punctuation">.</span><span class="token class-name">LogUtil</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keepclassmembers <span class="token keyword">class</span> <span class="token operator">*</span><span class="token operator">*</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@com</span><span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>ui<span class="token punctuation">.</span>component<span class="token punctuation">.</span><span class="token class-name">WXComponentProp</span> <span class="token keyword">public</span> <span class="token operator">*</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>bridge<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>dom<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>adapter<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>common<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> <span class="token operator">*</span> <span class="token keyword">implements</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span><span class="token class-name">IWXObject</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>ui<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>ui<span class="token punctuation">.</span>component<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token generics"><span class="token punctuation">&lt;</span>fields<span class="token punctuation">&gt;</span></span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token generics"><span class="token punctuation">&lt;</span>methods<span class="token punctuation">&gt;</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>view<span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span><span class="token keyword">module</span><span class="token punctuation">.</span>*<span class="token operator">*</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token operator">*</span> <span class="token keyword">extends</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>common<span class="token punctuation">.</span><span class="token class-name">WXModule</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token operator">*</span> <span class="token keyword">extends</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>ui<span class="token punctuation">.</span>component<span class="token punctuation">.</span><span class="token class-name">WXComponent</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
<span class="token operator">-</span>keep <span class="token keyword">class</span> <span class="token operator">*</span> <span class="token keyword">implements</span> com<span class="token punctuation">.</span>taobao<span class="token punctuation">.</span>weex<span class="token punctuation">.</span>ui<span class="token punctuation">.</span><span class="token class-name">IExternalComponentGetter</span><span class="token punctuation">{</span><span class="token operator">*</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
</code></pre></div></div><div class="page-nav"><p class="inner"><span class="prev">
<a href="/zh/guide/debug/debug.html" class="prev">
调试
</a></span><span class="next"><a href="/zh/guide/extend/extend-ios.html">
扩展iOS能力
</a>
</span></p></div><div class="page-edit"><div class="last-updated"><span class="prefix">上次更新: </span><span class="time">2020/12/10</span></div><div class="edit-link"><a href="https://github.com/apache/incubator-weex-site/edit/master/docs/zh/guide/extend/extend-android.md" target="_blank" rel="noopener noreferrer">编辑此页</a><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><a href="https://github.com/apache/incubator-weex-site/issues/new?body=https%3A%2F%2Fweex.io%2F" target="_blank" rel="noopener noreferrer" class="issueText">提交建议</a><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div><div class="score"><span class="choice"><img src="https://img.alicdn.com/tfs/TB1h7TSqpYqK1RjSZLeXXbXppXa-20-18.svg" class="score-icon">文档写得很棒</span><span class="choice"><img src="https://img.alicdn.com/tfs/TB1h7TSqpYqK1RjSZLeXXbXppXa-20-18.svg" class="score-icon bad">文档写得很差</span></div></div><div class="license-wrap" style="display:none;"><footer class="footer-container" data-v-0ad13d84><div class="footer-body" data-v-0ad13d84><img src="/logo@2x.svg" class="logo" data-v-0ad13d84><img src="//img.alicdn.com/tfs/TB11BRiIW6qK1RjSZFmXXX0PFXa-365-365.png" class="apache" data-v-0ad13d84><div class="cols-container" data-v-0ad13d84><div class="col col-12" data-v-0ad13d84><h3 data-v-0ad13d84>Disclaimer</h3><p data-v-0ad13d84>Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the
Incubator. Incubation is required of all newly accepted projects until a further review indicates that the
infrastructure, communications, and decision making process have stabilized in a manner consistent with
other successful ASF projects. While incubation status is not necessarily a reflection of the completeness
or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p></div><div class="col col-4" data-v-0ad13d84><dl data-v-0ad13d84><dt data-v-0ad13d84>ASF</dt><dd data-v-0ad13d84><a href="http://www.apache.org" target="_self" data-v-0ad13d84>Foundation</a></dd><dd data-v-0ad13d84><a href="http://www.apache.org/licenses/" target="_self" data-v-0ad13d84>License</a></dd><dd data-v-0ad13d84><a href="http://www.apache.org/events/current-event" target="_self" data-v-0ad13d84>Events</a></dd><dd data-v-0ad13d84><a href="http://www.apache.org/foundation/sponsorship.html" target="_self" data-v-0ad13d84>Sponsorship</a></dd><dd data-v-0ad13d84><a href="http://www.apache.org/foundation/thanks.html" target="_self" data-v-0ad13d84>Thanks</a></dd></dl></div><div class="col col-4" data-v-0ad13d84><dl data-v-0ad13d84><dt data-v-0ad13d84>Documentation</dt><dd data-v-0ad13d84><a href="/guide/develop/create-a-new-app.html" target="_self" data-v-0ad13d84>Quick start</a></dd><dd data-v-0ad13d84><a href="/guide/develop/setup-develop-environment.html" target="_self" data-v-0ad13d84>Developer guide</a></dd></dl></div><div class="col col-4" data-v-0ad13d84><dl data-v-0ad13d84><dt data-v-0ad13d84>Resources</dt><dd data-v-0ad13d84><a href="/blog/write-a-blog.html" target="_self" data-v-0ad13d84>Blog</a></dd><dd data-v-0ad13d84><a href="/community/" target="_self" data-v-0ad13d84>Community</a></dd><dd data-v-0ad13d84><a href="/guide/contribute/thanks.html" target="_self" data-v-0ad13d84>Thanks by Weex</a></dd><dd data-v-0ad13d84><a href="https://www.apache.org/security/" target="_self" data-v-0ad13d84>Security</a></dd></dl></div></div><div class="copyright" data-v-0ad13d84><span data-v-0ad13d84>Copyright © 2018-2019 The Apache Software Foundation. Apache and the Apache feather
logo are trademarks of The Apache Software Foundation.</span></div></div></footer></div></div><!----></div></div>
<script src="/assets/js/app.0ff943f0.js" defer></script><script src="/assets/js/179.1a3a2c12.js" defer></script>
</body>
</html>