ãã£ãï¼ãã¡ã¤ã«ã§ï¼HTMLï¼JS製ã®ãã¤ãã£ãAndroidã¢ããªãä½ãæé ãï¼åä½ãããµã³ãã«ã³ã¼ãä»ããWebViewã®æ´»ç¨æ¹æ³ï¼
éè¦ãªãç¥ããï¼
ãã®è¨äºã§å ¬éããæ å ±ã¯ï¼Androidã®MVCãã¬ã¼ã ã¯ã¼ã¯ãAndroid-MVCãã®æ©è½ã®ä¸é¨ã¨ãã¦åãè¾¼ã¾ãã¾ããã
ããæ£ç¢ºãªè¨è¨æ å ±ãï¼åä½å¯è½ãªå ¨ã½ã¼ã¹ã³ã¼ããé²è¦§ãããå ´åï¼ãAndroid-MVCãã®å ¬å¼ãã¼ã¸ããæè¡æ å ±ãåç §ãã¦ãã ããã
Androidã®MVCãã¬ã¼ã ã¯ã¼ã¯ - ãAndroid-MVCã
http://code.google.com/p/android-mvc-...
HTMLã¨JavaScriptã使ã£ã¦ï¼Androidã®ãã¤ãã£ãã»ã¢ããªã使ãï¼å®æ©ä¸ã§åããã
ç»é¢ã®è£å´ã§ã¯ï¼Javaã®ã³ã¼ãï¼Activityãªã©ï¼ãåãã¦ããã
ç¹å¥ãªãã¼ã«ã¯ï¼ä½ãå¿ è¦ãªãã
Androidã®ï¼æ¨æºã®éçºç°å¢ããããã°ããã
ãµã³ãã«ã³ã¼ãã¨å使é
ã¾ããã¢ã¯ãã£ããã£ã
WebviewTestActivity.java
package com.example; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; /** * HTMLã¨JavaScriptã§ã¢ããªã®ç»é¢å¨ããå®è£ ãããµã³ãã«ã * @author id:language_and_engineering * */ public class WebviewTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wv = new WebView(this); // WebViewå ã§JavaScriptãæå¹å wv.getSettings().setJavaScriptEnabled(true); // WebViewå ã®JavaScriptããï¼Javaã®ãªãã¸ã§ã¯ããåç §å¯è½ã«ãã wv.addJavascriptInterface(this, "droid"); // WebViewå ã§ãºã¼ã æ©è½ãæå¹ã«ãã wv.getSettings().setBuiltInZoomControls(true); setContentView(wv); // WebViewå ã«ï¼ã¢ããªãä¿æããHTMLã表示 wv.loadUrl("file:///android_asset/hoge.html"); } // ä»»æã®æååããã°åºåããã¡ã½ãã public void x( String s ) { Log.d("WebViewTest", s); } // æååãè¿ãã¡ã½ãã public String y() { return "fuga"; } }
次ã«assetsãã©ã«ãå
ã«ï¼hoge.htmlãè¨ç½®ï¼
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>WebViewã®ãã¹ã</title> </head> <body> <h1>WebViewã®ãã¹ã</h1> <h2>JavaScriptããJavaå´ã®ã¡ã½ãããå¼ã³åºãï¼ï¼ï¼</h2> å ¥åæ¬ï¼<input type="text" size="20" id="text1" ><br> <input type="button" value="ä¸è¨ã®æååããã°ã«åºåãã" onclick="f1()" > <script> function f1() { var text1 = document.getElementById("text1"); var str = text1.value; // Javaå´ã®ã¡ã½ãããå¼ã³åºãã¦ï¼å¤ã渡ã droid.x( str ); } </script> <h2>JavaScriptããJavaå´ã®ã¡ã½ãããå¼ã³åºãï¼ï¼ï¼</h2> <input type="button" value="Javaå´ããStringãåãåã£ã¦è¡¨ç¤º" onclick="f2()" ><br> <span id="text2">ããã«è¡¨ç¤ºããã¾ãã</span> <script> function f2() { // Javaå´ã®ã¡ã½ãããå¼ã³åºãã¦ï¼è¿ãå¤ã表示 var str = droid.y(); var text2 = document.getElementById("text2"); text2.innerHTML = str; // â»alertã¯å©ç¨ä¸å¯è½ } </script> <!-- ã¹ã¿ã¤ã«ã·ã¼ãã«ããã¬ã¤ã¢ã¦ãã»ãã¶ã¤ã³ãå©ç¨å¯è½ --> <style> body { background-color : #FFE4B5; padding : 1em; /* CSSä¸ã§ã¯é·ãã®åä½ã«dipã使ããªã */ } </style> </body> </html>
ããã ãã
ãHTML製ã®Androidã¢ããªãã宿ããã
EclipseããAndroidã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦å®è¡ããã¨ï¼
ç»é¢ä¸ã«ã¯ï¼ã¤ã®ãã¿ã³ãããï¼ããããJavaå´ã®ã³ã¼ãã¨ãã¾ã飿ºãã¦åä½ãã¦ãããã
ã¬ã¤ã¢ã¦ãXMLã¨ãï¼ã¤ãã³ããªã¹ããã³ã¼ãã£ã³ã°ããæéãå¤§å¹ ã«åæ¸ãããã®ã宿ã§ããã ããã
ãã£ãï¼ãã¡ã¤ã«ã®ã³ã¼ãã£ã³ã°ã ãã§æ¸ã¾ãããã®ãã¤ã³ãï¼
- ActivityããWebViewãsetContentViewããã
- assetså ã®htmlã§JSãå©ç¨ããã
- ã¬ã¤ã¢ã¦ãXMLï¼ãããã§ã¹ãXMLã¯ããããªãã
åèï¼
Androidã¨JavaScriptã飿ºãããæ¹æ³
http://www.adamrocker.com/blog/172/ja...
- WebViewã®Webkitçµç±ã§JSããAndroidã®GPSãã¼ã¿ãåå¾ãããµã³ãã«ã³ã¼ã
- JSããå¼ã³åºããã®ã¯publicã®ã¡ã½ããã ãã§ï¼privateã¡ã½ãããå¼ã³åºãã¨ã¨ã©ã¼ã«ãªãã®ã§æ³¨æ
WebViewã«æ¡å¤§ï¼ç¸®å°æ©è½ãã¤ããæ¹æ³
http://android49.blog.fc2.com/blog-en...
- setBuiltInZoomControlsã§ï¼ãã«ãã¿ããã®ãã³ãã¤ã³ã»ãã³ãã¢ã¦ãæä½ãå¯è½ã«
JavaScript alert not working in Android WebView
http://stackoverflow.com/questions/52...
- window.alertã¯WebViewä¸ã§ã¯åä½ããªãã§ç¡è¦ãããã®ã§ï¼WebChromeClient ã«ç½®ãæãããï¼ã¾ãã¯Javaå´ã§ãã¤ã¢ãã°ã表示ãããããªã¡ã½ãããã³ã¼ã«ãã
How to specify image size in webview css using dip?
http://stackoverflow.com/questions/66...
- CSSä¸ã§ã¯ï¼ã¬ã¤ã¢ã¦ãXMLã®ããã«dipã¨ããåä½ã使ãäºãã§ããªãããã«ãããã¤ã¹ã®è§£å度ã«å¯¾å¿ããããã«ã¯ï¼emã使ã£ã¦å·¥å¤«ãããããã
ã¨ããã§å®ã¯ï¼HTMLã¯ãã¡ã¤ã«ã§ãªãã¦ãOKã
ãã¡ã¤ã«ãæºåããã«ï¼Javaå´ã§ãã ã®æååã¨ãã¦HTMLãæ§ç¯ãã¦æ¸ã¾ãã¦ãã¾ãäºãã§ããã
ãã®å ´åï¼ãã®è¦ä»¶ã¯ããã£ãï¼ãã¡ã¤ã«ã§ãå®ç¾ã§ããäºã«ãªãã
WebViewãããã¼ã«ã«ç»åãåç §ãã
http://bugcloud.com/?p=1239
- ããã°ã©ã å ã§htmlæååãçæãã¦ãWebView#loadData(html, âtext/htmlâ, âUTF-8â³)
- loadDataWithBaseURLã使ã
Referencing drawables in HTML in Androidâs WebView
http://remotedroid.net/blog/2011/01/1...
- HTMLãassetsãã©ã«ãå ã«é ç½®ããå ´åï¼HTMLå´ããdrawableãªç»åãªã½ã¼ã¹çãç´æ¥åç §ãããã¨ã¯ã§ããªããiconç»åã表示ãããå ´åã¯ä¸å·¥å¤«å¿ è¦
ã¾ãï¼loadUrlã§è¡¨ç¤ºãããHTMLãã¡ã¤ã«ã¯ï¼assetsãã©ã«ãç´ä¸ã«ç½®ããªãã¦ãããã
assetsã®ä¸ã«ãµããã©ã«ããä½ã£ã¦é層åãï¼ãã¼ã«ã«ãã¡ã¤ã«ãæ´çã§ããã
Displaying Android asset files in a WebView?
http://stackoverflow.com/questions/53...
- wv.loadUrl("file:///android_asset/html_no_copy/test.html"); // Works
ã¾ãï¼UI層ã§Javaã使ããªãã¨ããäºã¯ï¼ã¤ã¾ããªã½ã¼ã¹ã¯ã©ã¹ï¼R.javaï¼ãåç
§ã§ããªãäºã«ãªãã
ããã ã¨ï¼å¤è¨èªå¯¾å¿ããã¼ã«ãªã¼ã¼ã·ã§ã³ã§ä¸ä¾¿ããï¼
ã¨æããããããªããï¼ããã¯å¥ã®ææ®µã§å¯¾å¦ã§ããã
Androidä»è¨èªæ©è½2.1ã®çæç¹
http://kokuzuki.blogspot.jp/2011/06/a...
- if ( Locale.JAPAN.equals(Locale.getDefault() ) ã§loadUrl対象ãåå²ããã
ãã®ããã«ï¼WebViewã¯é常ã«ä¾¿å©ã
ããã念ã®ããï¼æ³¨æäºé ãã
ãã®ãµã³ãã«ã§ã¯ï¼å©ç¨ãããã¡ã¤ã«æ°ãã§ããã ãå°ãªãã¦æ¸ãããã«â¦ã¨ããæ¹éã§ã³ã¼ãã£ã³ã°ããã
ãããå®éã«ã¯ï¼Activityã¨ãcontextãªã©ã®ãä½ã§ãåºæ¥ã¦ãã¾ããªãã¸ã§ã¯ãããJSå´ã«æ¸¡ãã¨ããè¡çºã¯ï¼ã»ãã¥ãªãã£çã«ã¯é常ã«å±éºã§ããã
JSå´ã«æ¸¡ãããã®å°ããªãªãã¸ã§ã¯ããç¬èªã«ä½æãï¼å¿ è¦æå°éã®æ©è½ã ããå¼ã³åºããããã«ãã¦ããã¹ãã ã
ã»ãã¥ãªãã£é¢ã®æ
å ±ã¯å¾è¿°ããã
ã¢ãã¤ã«ã¢ããªéçºç¨ã®ãã¬ã¼ã ã¯ã¼ã¯ã®å é¢
ãHTML5ã§ãã¤ãã£ãã¢ããªãçæãï¼
ã¨ããã¢ãã¤ã«ç¨ãã¬ã¼ã ã¯ã¼ã¯ãï¼å··ã§çãã«æµè¡ã£ã¦ãããï¼ãã®ä»çµã¿ã¯ã©ããªã£ã¦ããã®ãã
ã©ããã¦ãããªäºãå¯è½ãªã®ãã
Androidã®å ´åï¼æ¬è¨äºã§ç´¹ä»ããWebViewããã¾ã使ããã¦ããã
ãã¬ã¼ã ã¯ã¼ã¯å´ã§ã¯ï¼JavaScriptããåç §ã§ãããããªJavaãªãã¸ã§ã¯ããæºåããã
HTMLå ã§ã¯ï¼ãã®ãªãã¸ã§ã¯ããçµç±ãã¦Android SDKã®APIãå©ç¨å¯è½ã«ãªãã
è¦ã¯ï¼HTMLãï¼ãã§ããå¿ ç¶æ§ã¯ä½ãã®ã ã
åç´ã«ï¼Webãã¼ã¸ãåããã¨ãã話ã
ãï¼ãã ããæ ¼å¥ï¼ç¹æ®ãªåå¨ã¨ãããã¨ã§ã¯ãªããããã¯èª¤è§£ããããã
WebViewã«Javascriptã§Androidã®APIãããããã¤ã³ã¿ãã§ã¼ã¹ã追å ãã
http://d.hatena.ne.jp/ttshrk/20110511...
- PhoneGap(androidç)ãjsWaffleãªã©ã®WebViewãã¼ã¹ã®ãã¬ã¼ã ã¯ã¼ã¯ã§ç«¯æ«ã®APIãå¼ã³åºãããã«è¡ã£ã¦ããæ¹æ³
- Titaniumãandroidçã¯ã¾ã WebViewãã¡ã¤ã³ï¼2011å¹´5æï¼
ãHTML5ã«ããAndroidã¢ããªéçºå ¥éãç®æ¬ããã ãã¾ãã
http://mzsm.me/2012/01/18/html5-andro...
- Titanium Mobileã¯ï¼Java/Objective-Cã®ä»£ããã«JavaScriptãè¨è¿°è¨èªã¨ãã¦å©ç¨ãï¼AndroidãiPhoneç¨ã®ã¢ããªãä½ã
- PhoneGapããããªãã¸ãã¬ã¼ã ã¯ã¼ã¯ãã¨ãã¦å©ç¨ããå ´åã¯ï¼HTML5ãCSS3ãå«ããWebå¶ä½ã®æè¡ã§ãWebã¢ããªãã使ããã®Webã¢ããªããã¬ã¼ã ã¯ã¼ã¯ã§ã©ããã³ã°ããããã¦ãã¤ãã£ãã¢ããªã使
HTML製ã®ã¢ãã¤ã«ã¢ããªãä½ããã¼ã«ã¨ãã¦ï¼å¹¾ã¤ãä¾ãæãã¦ã¿ãã
ï¼ï¼ï¼Titanium
Titatium Mobile ã®å ´åã¯ï¼JavaScriptå´ã§ã¯ãTiãã¨ãããªãã¸ã§ã¯ããå©ç¨ãï¼Javaå´ã®Titanium APIãå¼ã³åºãã
ããã¦Javaå´ã§ã¯ï¼ãTiãã®å®ä½ã¯ï¼ããããAndroid SDKãå¼ã³åºãããããããã·ã¡ã½ãããæºè¼ã«ãªã£ã便å©ãªãã¸ã§ã¯ãã§ããã
Titanium mobile éçºã§æä½éçè§£ãå¿ è¦ãª JavaScript ã®ãã¨
http://astronaughts.net/titanium-mobi...
- 主ã«JSONã§UIãå¦çãã
- Ti. 㯠Titanium. ã®ç¥ãTi. ã«ã¯éä¿¡ãä½ç½®æ å ±ãå é度ã»ã³ãµçã®æä½ãã§ããå¦çãå«ã¾ãã¦ãã
ï¼ï¼ï¼PhoneGap
PhoneGapãã¬ã¼ã ã¯ã¼ã¯ã¯ï¼ç¾å¨ã§ã¯Adobe社ã«è²·åããã¦ãªã¼ãã³ã½ã¼ã¹ã«ãªãï¼Apache Cordovaã¨ãå¼ã°ãã¦ããã
PhoneGapã«ã¤ãã¦
http://d.hatena.ne.jp/takeR/20120120/...
- HTML5ããã¼ã¹ã«ãããã¤ããªããã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯
- Titaniumãããç§»æ¤æ§ãé«ã
AdobeãPhoneGapãã©ã³ãã§Cordovaãæä¾
http://www.infoq.com/jp/news/2012/03/...
- Adobeã¯ã2011å¹´11æã« Nitobi Softwareã¨ãã®PhoneGap製åãè²·å
- Adobe㯠PhoneGapãã©ã³ãã§Cordovaãã£ã¹ããªãã¥ã¼ã·ã§ã³ãæä¾ãç¶ãã
ãã®ãã¼ã«ãï¼HTMLãã¡ã¤ã«å ããJavaScriptçµç±ã§ï¼Androidå´ã®APIã«ã¢ã¯ã»ã¹ã§ããã
ã¢ã¯ã»ã¹å¯è½ãªJavaã³ã¼ããèªåã§èªç±ã«æºåãããå ´åã¯ï¼PhoneGap Pluginæ©æ§ãå©ç¨ããã
Androidãã¤ãã£ãã³ã¼ãã®é£æº
http://d.hatena.ne.jp/takeR/20120125/...
- PhoneGapã¯JavaScriptããAndroidã®ç«¯æ«åºæã®æ©è½ãå¼ã³åºãä»çµã¿ãæä¾ãã
- ä»ã®å¦çã¨èªç±ã«é£æºããããå ´åã¯PhoneGapPluginã使ç¨ãã
AndroidçPhoneGapãã©ã°ã¤ã³ã®ç´¹ä»
http://dev.classmethod.jp/smartphone/...
- Javaå´ã§é³å£°èªèãå¯è½ãªãã©ã°ã¤ã³ãæºåãï¼JavaScriptããå¼ã³åºãã¦ãããµã³ãã«
PhoneGap APIãæ¡å¼µãã@iPhone
http://lab.dwango.jp/articles/extendi...
- JSå´ã®PhoneGap.exec()颿°å é¨ã§gap://ï¼Classï¼.ï¼commandï¼/[ï¼argumentsï¼][?ï¼dictionaryï¼]ã¨ããå½¢å¼ã®URIã«å¤æããObjective-Cå´ã¸ã®ããªãã¸ãå®ç¾
ã»ã»ã»
ãã®ããã«ï¼HTMLã§Androidã¢ããªãéçºãããã¬ã¼ã ã¯ã¼ã¯ãå©ç¨ããã¨ï¼
ããç¨åº¦ã®ã¢ããªã§ããã°ï¼Javaã®ã³ã¼ããæ¸ããã«å®æããã
JavaScriptã®ã¹ã¯ãªããã£ã³ã°ã ãã§å®ç¾ãã¦ãã¾ãäºãå¯è½ã ã
ãããã£ãæ¹å¼ã§éçºãããã¢ãã¤ã«ã¢ããªã®äºãï¼ãã¤ãã£ãã¢ããªã»Webã¢ããªã«å¯¾ãã¦ï¼ãã¤ããªããã¢ããªã¨å¼ã¶ã
JSã¯åçè¨èªãªã®ã§ï¼ããã°ã©ãã³ã°ãæè»ã§ã¹ãã¼ãã£ã
ãã ï¼ã¢ããªã®å®è¡ã¹ãã¼ãã¯é常ã®å ´åãããé
ããªãã
ã»ãã¥ãªãã£é¢
ãã®ããã«ï¼Androidã¢ããªã®ãã¥ã¼é¨åã«HTMLï¼JavaScriptãå©ç¨ããæ¹æ³ã«ã¯ï¼ã¡ãªããããã¡ãªãããããã
ã¢ãã¤ã«ãç¥ããªãã¦ãWebãã¶ã¤ããããã¸ã§ã¯ãã«åç»ã§ããã®ã§ï¼æ¢åã®Webå¶ä½ã®ã¹ãã«ã»äººæã使ãã¾ãããã
ãWebå¶ä½ã®ä¾¿å©ããï¼ã¢ãã¤ã«éçºã®ä¸çã«ä¸æ°ã«æã¡è¾¼ããäºãã§ããã
ããã¯è¯ãé¢ã ã
ã ãåæã«ï¼ãWebãæã¤å±éºãï¼ã¢ãã¤ã«ã®ä¸çã«ä¸æ°ã«æã¡è¾¼ããäºã«ããªãã
ãã®ãªã¹ã¯ãå¿ãã¦ã¯ãªããªãã
Android WebViewã®ã»ãã¥ãªãã£ãªã¹ã¯ã¨æ»æã®å®éï¼2012å¹´6æï¼
http://dl.dropbox.com/u/439702/slide/...
- ã¹ã©ã¤ãå½¢å¼ã§è©³ãã解説ãâ»forwardãã¿ã³ã§æ¬¡ã®ç»é¢ã¸é²ã
WebView ã§ã® JavaScript ã®ä½¿ç¨
http://www.techdoctranslator.com/andr...
注æ: JavaScript ã«ãã¤ã³ãããããªãã¸ã§ã¯ãã¯ãããçæãããã¹ã¬ããã§ã¯ãªãå¥ã¹ã¬ããã§å®è¡ãã¾ããè¦æ: addJavascriptInterface() ã使ã㨠JavaScript ã§ Android ã¢ããªã±ã¼ã·ã§ã³ãå¶å¾¡ã§ããããã«ãªãã¾ãã
ããã¯ã¨ã¦ã便å©ã§ã¯ããã¾ããã»ãã¥ãªãã£çã«åé¡ãããå±éºã§ããWebView ã® HTML ãä¿¡é ¼ã§ããªã㨠( ä¾ãã°ãHTML ã®ä¸é¨ã¾ãã¯å ¨é¨ãæä¾å ã䏿ãªäººç©ãè¡çºã«ããæä¾ããã¦ãããã® ) ãæ»æè ã«ããã¯ã©ã¤ã¢ã³ãå´ã®ã³ã¼ããããããããã¨æ»æè ãé¸å¥ããã³ã¼ããå®è¡ãããã㪠HTML ãåãè¾¼ããã¨ãã§ãã¦ãã¾ãã¾ãã
WebView ã«è¡¨ç¤ºããã HTML 㨠JavaScript ã®ãã¹ã¦ãè¨è¿°ããã¦ããªãå ´åã¯ããããã£ãç¨éã§ addJavascriptInterface() ã使ç¨ãã¹ãã§ã¯ããã¾ããã
ã¾ããWebView ã®å ã§èªåã使ããã¦ã§ããã¼ã¸ä»¥å¤ã«ã¦ã¼ã¶ãã¢ã¯ã»ã¹ã§ããããã«ãã¹ãã§ã¯ããã¾ãã ( ãã®ä»£ãããã¦ã¼ã¶ã«ã¯ããã©ã«ãã®ãã©ã¦ã¶ã¢ããªã±ã¼ã·ã§ã³ã§å¤é¨ã®ãªã³ã¯ãéãããããã«ãã¾ããã¦ã¼ã¶ã®ã¦ã§ããã©ã¦ã¶ã¯ãããã©ã«ãã§ãã¹ã¦ã® URL ãªã³ã¯ãéãããã«ãªã£ã¦ããã®ã§ããã®ã§ããã以ä¸ã®ã»ã¯ã·ã§ã³ã§èª¬æããéã®ãã¼ã¸ã®ããã²ã¼ã·ã§ã³ã®ãã³ããªã³ã°ã®å ´åã®ã¿æ³¨æãå¿ è¦ã§ã ) ã
ããããããã§ï¼ä½¿ãã©ããï¼ä½¿ãæ¹ã«è¦æ³¨æã
ã