android加載html

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括金秀網(wǎng)站建設(shè)、金秀網(wǎng)站制作、金秀網(wǎng)頁制作以及金秀網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,金秀網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到金秀省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
主要有2種方案:
方案一:
啟動第三方瀏覽器或者安卓內(nèi)置的瀏覽器進(jìn)行加載先生html文件。
方案二:
使用android 自帶的webview控件進(jìn)行加載html文件或者網(wǎng)頁。
不常用方案有1種:
使用android控件TextView進(jìn)行加載html文件。
主要原理:
通過讀取html文件里面的標(biāo)簽進(jìn)行解析相關(guān)的元素從而通過瀏覽器,或者android自帶的控件進(jìn)行顯示,其中webview控件本質(zhì)上就是一個瀏覽器,TextView顯示html內(nèi)容就是通過解析標(biāo)簽,元素通過內(nèi)置方法轉(zhuǎn)化成相應(yīng)帶有屬性的文本信息然后顯示到界面上。
詳細(xì)解決步奏:
方案一:
Uri?uri?=?Uri.parse("");?//要鏈接的地址或者h(yuǎn)tml
Intent?intent?=?new?Intent(Intent.ACTION_VIEW,?uri);
startActivity(intent);
缺點(diǎn)如果android中沒有瀏覽器,則無法啟動顯示相關(guān)內(nèi)容。
方案二:
webview?=?(WebView)?findViewById(R.id.WebView01);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("");//要鏈接的地址或者h(yuǎn)tml
缺點(diǎn):目前沒有什么缺點(diǎn),比其他2種好,天生為加載html文件而出生的
方案三:
不常用的方法,借助函數(shù)?Html.fromHtml()來解析html內(nèi)容,并且進(jìn)行顯示。
TextView?text1?=?(TextView)findViewById(R.id.TextView02);
text1.setText(Html.fromHtml(“font?size='20'網(wǎng)頁內(nèi)容html/font”));
缺點(diǎn):加載速度慢于webview加載速度。
最后
推薦使用webview進(jìn)行加載html內(nèi)容,其特性優(yōu)于其他2種加載方式
在android開發(fā)中,通常使用xml格式來描述布局文件。就目前而言,熟悉android布局及美化的人員少之又少,出現(xiàn)了嚴(yán)重的斷層。大部分企業(yè),其實(shí)還是程序員自己動手布局。這樣既浪費(fèi)時間和精力,也未必能達(dá)到理想的效果。但是,在企業(yè)級的android開發(fā)中,使用html頁面進(jìn)行布局,也有很多的優(yōu)勢(例如:簡單,大部分開發(fā)人員及美工都熟悉,方便統(tǒng)一進(jìn)行更新,管理)。據(jù)筆者了解,已經(jīng)有不少的公司在使用這種方式進(jìn)行布局開發(fā)。這也可能是一種趨勢。
下面,我將給出一個實(shí)例代碼,供大家學(xué)習(xí)使用html頁面給android應(yīng)用布局。
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內(nèi)置瀏覽器對象
webview.getSettings().setJavaScriptEnabled(true);//啟用javascript支持
//添加一個js交互接口,方便html布局文件中的javascript代碼能與后臺java代碼直接交互訪問
webview.addJavascriptInterface(new PersonPlugin() , "Person");//new類名,交互訪問時使用的別名
// body onload="javascript:Person.getPersonList()"
webview.loadUrl("");//加載本地的html布局文件
//其實(shí)可以把這個html布局文件放在公網(wǎng)中,這樣方便隨時更新維護(hù) 例如 webview.loadUrl("");
}
//定義一個內(nèi)部類,從java后臺(可能是從網(wǎng)絡(luò),文件或者sqllite數(shù)據(jù)庫) 獲取List集合數(shù)據(jù),并轉(zhuǎn)換成json字符串,調(diào)用前臺js代碼
private final class PersonPlugin{
public void getPersonList(){
ListPerson list = service.getPersonList();//獲得List數(shù)據(jù)集合
//將List泛型集合的數(shù)據(jù)轉(zhuǎn)換為JSON數(shù)據(jù)格式
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();//轉(zhuǎn)換成json字符串
webview.loadUrl("javascript:show('"+ JSONStr +"')");//執(zhí)行html布局文件中的javascript函數(shù)代碼--
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 ListPerson getPersonList()
{
ListPerson list =new ArrayListPerson();
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" ""
html
head
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
titleInsert title here/title
script type="text/javascript"
function show(jsondata){
var jsonobjs = eval(jsondata);
var table = document.getElementById("personTable");
for(var y=0; yjsonobjs.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";
//設(shè)置列內(nèi)容和屬性
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調(diào)用其插件中的java代碼 --
body onload="javascript:Person.getPersonList()"
table border="0" width="100%" id="personTable" cellspacing="0"
tr
td width="20%"編號/tdtd width="40%" align="center"姓名/tdtd align="center"電話/td
/tr
/table
a href="javascript:window.location.reload()"刷新/a
/body
/html
1、以小米手機(jī)為例,首先在手機(jī)上利用QQ接收一個HTML文件。
2、然后在手機(jī)QQ中點(diǎn)擊該HTML文件,選擇用其他應(yīng)用打開。
3、然后在其他應(yīng)用中選擇瀏覽器,點(diǎn)擊下方的僅此一次。
4、打開完成后的效果如圖所示,HTML文件成功被在瀏覽器中打開。
html頁面(命名:Android.html放在assets文件夾下):::::
!DOCTYPE?html?PUBLIC?"-//WAPFORUM//DTD?XHTML?Mobile?1.0//EN"?"
html?xmlns=""
head
meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"?/
script?language="javascript"?type="text/javascript"
function?get4Android(str){
document.getElementById("show").innerHTML="This?is?a?message?from?android:"+str;
}
/script
/head
body
div?id="show"/div
/body
/html
Text.java代碼:::
import?android.app.Activity;
import?android.os.Bundle;
import?android.os.Handler;
import?android.os.Message;
import?android.text.Editable;
import?android.view.MotionEvent;
import?android.view.View;
import?android.view.View.OnClickListener;
import?android.view.View.OnTouchListener;
import?android.webkit.WebSettings;
import?android.webkit.WebView;
import?android.webkit.WebViewClient;
import?android.widget.Button;
import?android.widget.EditText;
import?android.widget.TextView;
public?class?Text?extends?Activity?implements?OnClickListener?{
private?Button?button;
private?TextView?text;
private?WebView?web;
private?EditText?edit;
private?Handler?handler;
private?void?initView()?{
button?=?(Button)?this.findViewById(R.id.button2);
web?=?(WebView)?this.findViewById(R.id.webView1);
edit?=?(EditText)?this.findViewById(R.id.editText1);
button.setOnClickListener(this);
}
private?void?setWebView()?{
web.setWebViewClient(new?WebViewClient());
web.requestFocus();
WebSettings?setting?=?web.getSettings();
setting.setJavaScriptEnabled(true);
web.setOnTouchListener(new?OnTouchListener()?{
@Override
public?boolean?onTouch(View?v,?MotionEvent?event)?{
web.requestFocus();
return?false;
}
});
web.addJavascriptInterface(new?SendAndroid(),?"theKey");
web.loadUrl("");
}
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
setWebView();
handler?=?new?Handler()?{
public?void?handleMessage(android.os.Message?msg)?{
String?str?=?msg.obj.toString();
text.setText(str);
};
};
}
@Override
public?void?onClick(View?v)?{
Editable?editable?=?edit.getText();
web.loadUrl("javascript:get4Android(\""?+?editable.toString()
+?"\")");
}
class?SendAndroid?{
public?void?runOnAndroidJavaScript(final?String?str)?{
new?Thread(new?Runnable()?{
@Override
public?void?run()?{
System.out.println("******"?+?str);
Message?mes?=?handler.obtainMessage();
mes.obj?=?str;
handler.sendMessage(mes);
}
}).start();
}
}
}
主要是:web.loadUrl("javascript:get4Android(\""?+?editable.toString()+?"\")");中的“javascript:get4Android”要和html中的【function?get4Android(str){
document.getElementById("show").innerHTML="This?is?a?message?from?android:"+str;
}】方法名相同
Android系統(tǒng)提供了對簡單的HTML標(biāo)簽的支持,方便開發(fā)者設(shè)置格式化的文本內(nèi)容,比如斜體、粗體等。 通過
android.text.Html.fromHtml(String?source)
函數(shù)可以獲取一個格式化后的文本顯示對象。
目前支持如下的HTML標(biāo)簽:
Supported HTML-Tags
如果您的字符串在 strings.xml 文件中,則需要轉(zhuǎn)義HTML標(biāo)簽,不然的話 經(jīng)過Android處理后 所有的HTML標(biāo)簽都給過濾掉了。
需要把所有的“”用“l(fā)t;”替換,例如:?string name=”htmlText”lt;strong粗體lt;/strong/string
如果文本內(nèi)容比較長, 則轉(zhuǎn)義起來比較麻煩,并且閱讀也不太方便,這種情況下可以使用XML的CDATA標(biāo)記, 如下所示:
string name="htmlText"
![CDATA[
pHTML標(biāo)記的文本內(nèi)容 strong粗體/strong
? 、em斜體/em/p
?p
?ttteletype-style 字體/tt/p
]]
/string
分享文章:htmlandroid的簡單介紹
分享網(wǎng)址:http://chinadenli.net/article22/dsioscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、微信小程序、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)