htmlandroid交互
『壹』 HTML5能取代Android和iOS應用程序嗎
糾正一下,HTML5和Android和iOS不是平等關系,他是一種語言,只能和java及OC對等
下面回答,不能,至少短期內(個人認為5~10年),原因如下:
1、Android是谷歌的,iOS是蘋果的,各家有各家的利益
2、Android主流開發語言是JAVA,iOS是OC,為什麼,OC是iOS的專用語言這個暫且不說,而之所以Android使用JAVA是看中了之前做J2EE和J2SE等,大量的JAVA開發人員,之所以Android火起來,不單是Android開源(使手機生產商的生產成本下降),更是大量的JAVA開發人員能夠快速的進入這個新興平台,從技術上(可以理解為大量的App發布)推動Android進步
3、成本問題,以上兩點其實都在說這個問題,用HTML5取代JAVA和OC,首先要考慮人力成本問題,要有大量HTML5開發人員這個前提條件,否則用人單位不會為此付出更多的人力成本和風險成本(主要的,會不會開發出來的東西效果很垃圾),而谷歌和蘋果開發Android和iOS更是花費了極大的成本,他們也不會願意看到自己的成果被別人竊取而損害自己的利益
4、性能問題,其實還是從成本角度出發,HTML5這個東西他再厲害是跑在瀏覽器上的,谷歌和蘋果怎麼可能在損害自己利益的情況下,還會花大價錢開發更高級的瀏覽器以適應HTML5(把HTML5跑的和應用程序一樣快),如果系統內置的瀏覽器達不到那個量級,外置瀏覽器都是扯淡,所以你會看到,HTML5好不好,很好,但是在Android和iOS上和原生應用程序比較,他就是慢,就是山寨,各種特效都出不來的情況下還談什麼HTML5
5、開發者問題,也是相輔相成的,看看現在市面上有幾個喜歡做WEB前端的就知道了,人才很少,價格很低(我也在招人,有感而發),這就導致更少的人去學去做,更不要說在Android和iOS平台上,HTML5要適應這兩個平台的規則,比如JS回調要在JAVA中執行的問題,這就導致你要學習HTML5就要多學習Android,那我為什麼不直接學Android,種種原因會導致HTML5(在手機平台)的開發者短期內不會爆發式增長(多說一嘴,要解決這個問題,兩種可能,1、像Android,原本就有那麼多JAVA開發者,而且這些JAVA開發者還做過手機,2、用人單位普遍的覺得HTML5好,從而願意花大價錢聘請HTML5開發者,從而抬高整體行業薪資,使跟風者不絕。目前看這兩種可能性都不存在)
6、語言成熟度,語言成熟度不是說SDK第幾版,語言本身是否還有漏洞這種問題,成熟度本身的意味其實就是「人」和「庫」,是「能否進行快速開發」,比如php效率低下,為什麼這么火,價格這么高,原因是漫天的完整源碼、框架、庫,是大量的有豐富經驗的開發者,是「快速開發」。HTML5?還差的太遠!所謂「成熟」,還得時間的積累
綜上,HTML5很新很火,那是在PC WEB平台,開發者少,收入不高,在Android和iOS平台上運行效率低,開發風險高,不成熟,所以我說「不能,至少短期內(個人認為5~10年)」
原創哦,親,純手打的,給個贊吧~
『貳』 如何利用html5開發android界面
三種解決方式:1 viewport屬性 2 CSS控制 3 JS控制
1 viewport屬性放在HTML的<meta>中
<SPAN style="FONT-SIZE: x-small"> <head>
<title>Exmaple</title>
<meta name=」viewport」 content=」width=device-width,user-scalable=no」/>
</head></SPAN>
meta中viewport的屬性如下
<SPAN style="FONT-SIZE: x-small"> <meta name="viewport"
content="
height = [pixel_value | device-height] ,
width = [pixel_value | device-width ] ,
initial-scale = float_value ,
minimum-scale = float_value ,
maximum-scale = float_value ,
user-scalable = [yes | no] ,
target-densitydpi = [dpi_value | device-dpi |
high-dpi | medium-dpi | low-dpi]
"
/></SPAN>
2 CSS控制設備密度
為每種密度創建獨立的樣式表(注意其中的webkit-device-pixel-ratio 3個數值對應3種解析度)
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.5)" href="hdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.0)" href="mdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 0.75)" href="ldpi.css" />
在一個樣式表中,指定不同的樣式
『叄』 初學app開發,誰知道android裡面的html5頁面之間如何傳參啊啊啊啊
html5也是要js與webview交互的,android有介面提供。可網路例子
『肆』 android 我在html5開發操作後怎麼接受它返回的數據
依據Gartner的研究,Android是全球最受歡迎的移動操作系統,是它支持著大多數智能手機;而依據Canalys的調研,現在在平板電腦領域享有多數市場份額(53%)。讓Android有如此熱度的一部分因素是其多樣性。幾乎每個用戶都有一個的Android設備的尺寸和形狀,想要一個13英寸帶可拆卸鍵盤的平板電腦?Android同樣滿足你。
當如此多樣的設備讓用戶歡喜時,它也為開發人員帶來了不少頭疼的麻煩。屏幕尺寸、解析度、CPU架構和操作系統版本等,都會為開發人員創建原生Android app帶來挑戰。幸運的是,HTML5使得處理這龐大而多樣的Android設備隊伍變得快速而簡單。
「服務員,我的凍酸奶裡面有果凍豆」
Android初次廣泛登台是在2009年。製造商發布設備,一般只對操作系統更新一兩次,就放棄它開始關注新硬體了。因此,根據OpenSignal對超過五十萬台Android設備中,名為Gingerbread(姜餅2.3 x)的版本依然占據著最大市場份額(34.1%)。
Android SDK是操作系統特定的,這為Android開發人員營造了挑戰。也就是說,如果你用4.0 SDK(冰淇淋三明治)開發app,你的app將不能在2.3(姜餅)上運行。這無疑讓開發人員置身於一個尷尬境地。一方面,你要用最新最好的SDK,另一方面,你要app得到盡可能多的下載。
有了HTML5,你不用再糾結於選擇。你可以用強大的它來構建你的app,無視Android操作系統版本。
龐大的Android設備隊伍
在Android設備運行的不同不僅僅是表面上的,任何Android設備的心臟部分都是CPU由Qualcomm、PowerVR、NVidia、MediaTek、Intel等製造。取決於你的app需要用到哪個操作系統的特性,原生Android SDK可能不會兼容什麼特別設備。
HTML5提供APIs來做很多通常被認為是原生操作系統功能的事情。HTML5包含對於鍵/值存儲、文件系統IO甚至通過地理定位訪問GPS的強大APIs。
要訪問原生操作系統功能,沒有標準的HTL5界面。 Apache Cordova framework提供一個界面讓你的app在任何設備上訪問原生操作系統資源,諸如攝像機和加速計。
各種形狀和大小
Android設備有著各種尺寸,小至三星的新齒輪智能手錶,大至13英寸或更大的平板電腦。更添其復雜性的是解析度范圍從240×320跨到2560×1600。
要解決這個問題,你可能得用線形布局或網格視圖。這類布局能良好運行,如果你想要依據用戶需求滾動到視圖中查看app。
好在HTML5提供一個更好的途徑來處理尺寸大小的問題——用響應設計。響應設計是由CSS Media Queries所增強的簡單結構的HTML在更大的屏幕利用更多的空間,在更小的屏幕上縮小或消除那些並不重要的元素。
當響應設計正確完成時,用戶就對跨平台的app有了流暢的體驗,即便是重新調整屏幕,這是在任何操作系統上解決屏幕尺寸/解析度問題的最好辦法。
移植到其它平台
Java的願景是「write once, run any where(只寫一次,哪兒都能跑)」。不幸,出於種種原因,不能實現這個夢。一些交互編譯器可以允許創建針對Android和iOS的app,但只有HTML5能在移動操作系統和互聯網瀏覽器上運行。
在諸如Android、iOS、Windows Phone等移動操作系統上,HTML5應用通常託管於Apache Cordova (aka PhoneGap)內,Apache Cordova充當將你的HTML5聯繫到原生操作系統的角色,這包括定義你的app圖標、載入屏幕和提供JavaScript來訪問原生操作系統硬體。
HTML5支持跨平台,當然,還支持網頁。你第一次用HTML5取代.ASPX或PHP來開啟一個新項目將需要十足的信仰之外,還要你的app在沒有伺服器端生成HTML的情況下工作。
開啟你的瀏覽器
HTML5應用的性能可以無限接近於原生性能,如果它們是被精心無誤地製作處理的。
HTML5應用絕對需要被安裝到設備上。通過將Apache Cordova或嵌入的WebView指向一個託管於互聯網的網頁來構建的app只能提供可憐的用戶體驗。如果你的app每次都需要用戶通過點擊一些東西來下載用戶界面,這是不可能滿足他們「即時響應」的期望的。為獲得接近於原生的速度,你所有的HTML5、JavaScript和CSS都必須安裝在本地設備上,從而使它能夠在用戶點擊後就運行。
大多數移動app從互聯網伺服器上載入和保存數據。為了保持你的app以最快的速度響應,你將要在本地存儲一個緩存數據並非同步刷新你的數據。這將允許你的app在非同步更新時,立即渲染其UI。
HTML的復雜性使得關於渲染你的用戶界面需要多少CPU cycles有了很大不同,最好是保持你的HTML盡可能地結構簡單化,帶有盡可能少的嵌套級別標簽。舉個例子說,深度嵌套的HTML表格,是出了名地衰!
結論
HTML5允許你寫一次應用程序並快速部署它到幾乎現有的每個操作系統。它即時響應的能力很適合現在數不勝數的安卓設備屏幕尺寸。憑借大量可用的工具,諸如 Intel XDK new IDE,你可以在Android使用HTML開放式架構、CSS和JavaScript上提供一種美妙的體驗。
『伍』 android 怎麼改變html中文字的大小
通過android代碼與html代碼交互實現。下面是交互的小例子,這個例子來源於android學習手冊,360手機助手中下載,包含108個例子,文檔還有源碼。
1 調用網頁上的js代碼
Android中可以通過webview來實現和js的交互,在程序中調用js代碼,只需要將webview控制項的支持js的屬性設置為true,,然後通過loadUrl就可以直接進行調用,如下所示:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");
2 網頁java代碼的方法
在網頁中調用java代碼,需要在webview控制項中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(newObject() {
publicvoid clickOnAndroid() {
mHandler.post(newRunnable() {
publicvoid run() {
Toast.makeText(Test.this,"測試調用java", Toast.LENGTH_LONG).show();
}
});
}
},"demo");
在網頁中,只需要像調用js方法一樣,進行調用就可以
<div id='b'><a onclick="window.demo.clickOnAndroid()">b.c</a></div>
3 Java代碼調用js並傳參
首先需要帶參數的js函數,如functiontest(str),然後只需在調用js時傳入參數即可,如下所示:
mWebView.loadUrl("javascript:test('aa')");
4.Js中調用java函數並傳參
首先一樣需要帶參數的函數形式,但需注意此處的參數需要final類型,即得到以後不可修改,如果需要修改其中的值,可以先設置中間變數,然後進行修改。如下所示:
mWebView.addJavascriptInterface(newObject() {
publicvoid clickOnAndroid(final int i) {
mHandler.post(newRunnable() {
publicvoid run() {
intj = i;
j++;
Toast.makeText(Test.this,"測試調用java" + String.valueOf(j), Toast.LENGTH_LONG).show();
}
});
}
},"demo");
『陸』 如何實現網頁代碼(JS/HTML)和IOS應用程序交互
//①ji與android交互
//js調用android方法
window.類.方法名稱(參數1,參數2);
//android調用js方法(loginIn:方法名稱,uname:參數)
//activity.loadUrl("javascript:loginIn('"+uname+"');");
//②js與ios交互
//js調用ios方法(objc:協議)
window.location.href='objc://方法名稱|參數1|參數2';
//ios調用js方法:
同android
其中:android的activity如下:
@Override
publicvoidonCreate(BundlesavedInstanceState){
//setFullScreen(true);
Intentintent=newIntent(getApplicationContext(),
SplashActivity.class);
startActivity(intent);
super.onCreate(savedInstanceState);
super.init();
//Setby<contentsrc="index.html"/>inconfig.xml
activity=this;
//this.appView.setBackgroundResource(R.drawable.welcome);//設置背景圖片
//
//super.setIntegerProperty("splashscreen",R.drawable.welcome);
//設置閃屏背景圖片
//super.setBooleanProperty(name,value)
//super.loadUrl("這里是html頁面的路徑");
super.appView.addJavascriptInterface(newFu(),"這里是類名(js中需要通過這個類名訪問android方法)");
super.loadUrl(Config.getStartUrl());
//super.loadUrl("file:///android_asset/www/index.html")
//mController.openShare(activity,false);
//try{
//getToken();
//}catch(NoSuchAlgorithmExceptione){
////TODOAuto-generatedcatchblock
////e.printStackTrace();
//}
}
『柒』 android和h5交互,js怎麼在android端列印日誌
Android和H5之間的交互hybridApp開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?1、webView載入頁面我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同://例如:載入assets文件夾下的test.html頁面mWebView.loadUrl("file:///android_asset/test.html")//例如:載入網頁mWebView.loadUrl("")如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){mWebView.loadUrl(url);returntrue;}}});2、Android本地通過Java調用HTML頁面中的JavaScript方法想要調用js方法那麼就必須讓webView支持WebSettingswebSettings=mWebView.getSettings();//設置為可調用js方法webSettings.setJavaScriptEnabled(true);若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});js代碼如下:2、js調用Android本地Java方法在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法publicclassJsInteration{@(){return"helloworld";}}定義完這個方法後再調用mWebView.addJavascriptInterface()方法:mWebView.addJavascriptInterface(newJsInteration(),"android");那麼在js中怎麼來調用呢?4、攔截HTML頁面中的點擊事件mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){//判斷url攔截事件if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:{publicstaticfinalStringTAG="MainActivity";privateWebViewmWebView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView=(WebView)findViewById(R.id.webView);mWebView.loadUrl("file:///android_asset/test.html");WebSettingswebSettings=mWebView.getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(newJsInteration(),"android");mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});}//Android調用有返回值js方法@TargetApi(Build.VERSION_CODES.KITKAT)publicvoidonClick(Viewv){mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});}publicclassJsInteration{@(){return"helloworld";}}}test.html調用本地方法點擊
『捌』 如何在android中使用html作布局文件
在android開發中,通常使用xml格式來描述布局文件。就目前而言,熟悉android布局及美化的人員少之又少,出現了嚴重的斷層。大部分企業,其實還是程序員自己動手布局。這樣既浪費時間和精力,也未必能達到理想的效果。但是,在企業級的android開發中,使用html頁面進行布局,也有很多的優勢(例如:簡單,大部分開發人員及美工都熟悉,方便統一進行更新,管理)。據筆者了解,已經有不少的公司在使用這種方式進行布局開發。這也可能是一種趨勢。
下面,我將給出一個實例代碼,供大家學習使用html頁面給android應用布局。
Java代碼
package com.dazhuo.ui;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import com.dazhuo.domain.Person;
import com.dazhuo.service.PersonService;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
public class MainActivity extends Activity {
private PersonService service;
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
service =new PersonService();
webview = (WebView) this.findViewById(R.id.webView);//android內置瀏覽器對象
webview.getSettings().setJavaScriptEnabled(true);//啟用javascript支持
//添加一個js交互介面,方便html布局文件中的javascript代碼能與後台java代碼直接交互訪問
webview.addJavascriptInterface(new PersonPlugin() , "Person");//new類名,交互訪問時使用的別名
// <body onload="javascript:Person.getPersonList()">
webview.loadUrl("file:///android_asset/index.html");//載入本地的html布局文件
//其實可以把這個html布局文件放在公網中,這樣方便隨時更新維護 例如 webview.loadUrl("www.xxxx.com/index.html");
}
//定義一個內部類,從java後台(可能是從網路,文件或者sqllite資料庫) 獲取List集合數據,並轉換成json字元串,調用前台js代碼
private final class PersonPlugin{
public void getPersonList(){
List<Person> list = service.getPersonList();//獲得List數據集合
//將List泛型集合的數據轉換為JSON數據格式
try {
JSONArray arr =new JSONArray();
for(Person person :list)
{
JSONObject json =new JSONObject();
json.put("id", person.getId());
json.put("name", person.getName());
json.put("mobile",person.getMobile());
arr.put(json);
}
String JSONStr =arr.toString();//轉換成json字元串
webview.loadUrl("javascript:show('"+ JSONStr +"')");//執行html布局文件中的javascript函數代碼--
Log.i("MainActivity", JSONStr);
} catch (Exception e) {
// TODO: handle exception
}
}
//打電話的方法
public void call(String mobile){
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ mobile));
startActivity(intent);
}
}
}
Java代碼
package com.dazhuo.domain;
public class Person {
private Integer id;
public Integer getId() {
return id;
}
public Person(Integer id, String name, String mobile) {
super();
this.id = id;
this.name = name;
this.mobile = mobile;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
private String name;
private String mobile;
}
Java代碼
package com.dazhuo.service;
import java.util.ArrayList;
import java.util.List;
import com.dazhuo.domain.Person;
public class PersonService {
public List<Person> getPersonList()
{
List<Person> list =new ArrayList<Person>();
list.add(new Person(32, "aa", "13675574545"));
list.add(new Person(32, "bb", "13698874545"));
list.add(new Person(32, "cc", "13644464545"));
list.add(new Person(32, "dd", "13908978877"));
list.add(new Person(32, "ee", "15908989898"));
return list;
}
}
Html代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function show(jsondata){
var jsonobjs = eval(jsondata);
var table = document.getElementById("personTable");
for(var y=0; y<jsonobjs.length; y++){
var tr = table.insertRow(table.rows.length); //添加一行
//添加三列
var td1 = tr.insertCell(0);
var td2 = tr.insertCell(1);
td2.align = "center";
var td3 = tr.insertCell(2);
td3.align = "center";
//設置列內容和屬性
td1.innerHTML = jsonobjs[y].id;
td2.innerHTML = jsonobjs[y].name;
td3.innerHTML = "<a href='javascript:Person.call(\""+ jsonobjs[y].mobile+ "\")'>"+ jsonobjs[y].mobile+ "</a>";
}
}
</script>
</head>
<!-- js代碼通過webView調用其插件中的java代碼 -->
<body onload="javascript:Person.getPersonList()">
<table border="0" width="100%" id="personTable" cellspacing="0">
<tr>
<td width="20%">編號</td><td width="40%" align="center">姓名</td><td align="center">電話</td>
</tr>
</table>
<a href="javascript:window.location.reload()">刷新</a>
</body>
</html>
『玖』 android嵌入h5,怎麼交互
Android和H5之間的交互
hybrid App開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?
1、webView載入頁面
我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同:
//例如:載入assets文件夾下的test.html頁面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:載入網頁
mWebView.loadUrl("http://www..com")
如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});
2、Android本地通過Java調用HTML頁面中的JavaScript方法
想要調用js方法那麼就必須讓webView支持
WebSettings webSettings = mWebView.getSettings();
//設置為可調用js方法
webSettings.setJavaScriptEnabled(true);
若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
js代碼如下:
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}
</script>
2、js調用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}
定義完這個方法後再調用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那麼在js中怎麼來調用呢?
<script type="text/javascript">
function s(){
//調用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}
</script>
4、攔截HTML頁面中的點擊事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判斷url攔截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android調用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}
}
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}
</script>
</head>
<body>
<button onclick="s()">調用本地方法</button>
<a href="file:///android_asset/test2.html">點擊</a>
<p id="p"></p>
</body>
</html>
『拾』 html5怎麼與android交互
Android中構建HTML5應用
使用WebView控制項,與其他控制項的使用方法相同在layout中使用一個標簽,WebView不包括導航欄,地址欄等完整瀏覽器功能,只用於顯示一個html.
在WebView中載入Web頁面:
(1)注意在manifest文件中加入訪問互聯網的許可權:
<</SPAN>uses-permission android:name="android.permission.INTERNET" />
在Android中點擊一個鏈接,默認是調用應用程序來啟動,因此WebView需要代為處理這個動作通過WebViewClient。
(2)在布局文件中(main.xml),添加標簽WebView的id
[html] view plainprint?
<</SPAN>WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
(2)在onCreate()中使用loadUrl(...)載入html。
[java] view plainprint?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView mWebView = (WebView)findViewById(R.id.webview);
// mWebView.getSettings().setJavaScriptEnabled(true);
// mWebView.setWebChromeClient(new WebChromeClient());
mWebView.loadUrl("file:///android_asset/www/NewFile.html");
}
(3)實現android與js交互
默認情況下WebView中的js是禁用的,通過將WebSettings附加到WebView中啟動js,可以用getSettings()檢索WebSettings,然後用setJavaScriptEnabled()啟動js。
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());
(4)在JS中調用Android的函數方法
把本類的一個實例添加到js的全局對象window中,這里是"injs"。
mWebView.addJavascriptInterface(new JavaScriptInterface(),"injs");
實現JavaScriptInterface()類,這里在該類中定義一個方法public void runOnAndroidJavaScript(final String str){...}
在js中調用java函數
windows.injs.runOnAndroidJavaScript(str);//調用android的函數