Android之WebView

簡(jiǎn)介

WebView是Android中用于加載web頁(yè)面的控件

優(yōu)點(diǎn)

  • 可以直接內(nèi)嵌到App中用于顯示和渲染web頁(yè)面
  • 可以直接用html文件(網(wǎng)絡(luò)上或本地assets中)作布局

配置權(quán)限

android:name="android.permission.INTERNET"
如果需要定位功能研铆,還需要配置下面兩個(gè)權(quán)限
android:name="android.permission.ACCESS_FINE_LOCATION"
android:name="android.permission.ACCESS_COARSE_LOCATION"

兩個(gè)實(shí)現(xiàn)方法

  • setWebClient:主要處理解析,渲染網(wǎng)頁(yè)等瀏覽器做的事情
  • setWebChromeClient:輔助WebView處理Javascript的對(duì)話框,網(wǎng)站圖標(biāo)鹦筹,網(wǎng)站title炸庞,加載進(jìn)度等
    WebViewClient就是幫助WebView處理各種通知幕袱、請(qǐng)求事件的乏悄。

加載網(wǎng)頁(yè)字符串

使用loadData()加載一段HTML內(nèi)容

mWebView = (WebView) findViewById(R.id.id_webView);
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
mWebView.loadData(summary, "text/html", null);

如下圖:


這里寫(xiě)圖片描述

加載網(wǎng)絡(luò)資源

使用loadUrl()加載網(wǎng)絡(luò)url

String htmlurl = "http://baidu.com";
mWebView.loadUrl(htmlurl);

加載時(shí)氮凝,會(huì)自動(dòng)跳轉(zhuǎn)到系統(tǒng)瀏覽器打開(kāi),如下圖:


這里寫(xiě)圖片描述

而我們使用WebView就是為了展示網(wǎng)頁(yè)萝映,還跳轉(zhuǎn)個(gè)雞毛啊易桃,為了解決這個(gè)問(wèn)題,就要使用WebViewClient這個(gè)Class

mWebView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 
        //  重寫(xiě)此方法表明點(diǎn)擊網(wǎng)頁(yè)里面的鏈接還是在當(dāng)前的webview里跳轉(zhuǎn)锌俱,不跳到瀏覽器那邊
        view.loadUrl(url);
        return true;
    }
});

效果如下圖:


這里寫(xiě)圖片描述

實(shí)例

創(chuàng)建Android項(xiàng)目名曰:WebViewTest
添加一個(gè)Activity,MainActivity
xml文件如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<WebView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/webView"
    />
</LinearLayout>

java代碼如下:

package com.webviewurl.test;

import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.GeolocationPermissions.Callback;
import android.graphics.Bitmap; 

public class MainActivity extends Activity {
 private static final String TAG = "MainActivity";
    private WebView webView;
    private static final String htmlurl="http://baidu.com";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webView = (WebView)this.findViewById(R.id.webView);
        WebSettings settings = webView.getSettings();
        //設(shè)置Webview可以調(diào)用javascript
        settings.setJavaScriptEnabled(true);
        //設(shè)置webview可以調(diào)用地理位置信息
        settings.setGeolocationEnabled(true);
        //設(shè)置webview調(diào)用地理位置信息的緩存路徑
                settings.setGeolocationDatabasePath(getFilesDir().getPath());
        //配置獲取設(shè)備位置信息的權(quán)限
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onGeolocationPermissionsShowPrompt(String origin,Callback callback) {
                callback.invoke(origin, true, false);  
                super.onGeolocationPermissionsShowPrompt(origin, callback);
            }
        });
        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url){ 
                //  重寫(xiě)此方法表明點(diǎn)擊網(wǎng)頁(yè)里面的鏈接還是在當(dāng)前的webview里跳轉(zhuǎn)敌呈,不跳到瀏覽器那邊
                view.loadUrl(url);
                return true;
            }
        });
        
        webView.addJavascriptInterface(new ContactPlugin(), "contact");
        webView.loadUrl(htmlurl);
    }
}

加載本地資源

方法同上贸宏,只是架子啊方法不同
webView.loadUrl("file:///android_asset/test.html");

Demo地址
CSDN:http://download.csdn.net/detail/shiquanqq/9464237
Github:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市磕洪,隨后出現(xiàn)的幾起案子吭练,更是在濱河造成了極大的恐慌,老刑警劉巖析显,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲫咽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谷异,警方通過(guò)查閱死者的電腦和手機(jī)分尸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)歹嘹,“玉大人箩绍,你說(shuō)我怎么就攤上這事〕呱希” “怎么了材蛛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)怎抛。 經(jīng)常有香客問(wèn)我卑吭,道長(zhǎng),這世上最難降的妖魔是什么马绝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任豆赏,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘河绽。我一直安慰自己己单,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布耙饰。 她就那樣靜靜地躺著纹笼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苟跪。 梳的紋絲不亂的頭發(fā)上廷痘,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音件已,去河邊找鬼笋额。 笑死,一個(gè)胖子當(dāng)著我的面吹牛篷扩,可吹牛的內(nèi)容都是我干的兄猩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鉴未,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枢冤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铜秆,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淹真,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后连茧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體核蘸,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年啸驯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了客扎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坯汤,死狀恐怖虐唠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惰聂,我是刑警寧澤疆偿,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站搓幌,受9級(jí)特大地震影響杆故,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溉愁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一处铛、第九天 我趴在偏房一處隱蔽的房頂上張望饲趋。 院中可真熱鬧,春花似錦撤蟆、人聲如沸奕塑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)龄砰。三九已至,卻和暖如春讨衣,著一層夾襖步出監(jiān)牢的瞬間换棚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工反镇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留固蚤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓歹茶,卻偏偏與公主長(zhǎng)得像夕玩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惊豺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,288評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程风秤,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • 這篇博客主要來(lái)介紹 WebView 的相關(guān)使用方法,常見(jiàn)的幾個(gè)漏洞领迈,開(kāi)發(fā)中可能遇到的坑和最后解決相應(yīng)漏洞的源碼彻磁,以...
    Shawn_Dut閱讀 7,238評(píng)論 3 55
  • 沒(méi)有誰(shuí)決定你一生,務(wù)必要怎樣去過(guò)狸捅。生活的樣子衷蜓,無(wú)關(guān)風(fēng)月,全然在于你尘喝。時(shí)間是寶貴的磁浇,生活是自己的。一輩子朽褪,要怎樣過(guò)置吓,...
    安言靜語(yǔ)閱讀 194評(píng)論 0 0
  • #與孩子一起成長(zhǎng),做更好的自己# 孩子第三個(gè)30天目標(biāo):每晚8:30關(guān)燈睡覺(jué)缔赠,多吃蔬菜和水果衍锚。 媽媽第三個(gè)30天目...
    yi_jing830閱讀 209評(píng)論 0 0