1. 程式人生 > >安卓中webview的使用方法介紹

安卓中webview的使用方法介紹

本文主要講解WebView的一些常用使用方法

程式碼如下:

xml檔案:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

   

        <ProgressBar
            android:id="@+id/progressBar1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" />

   
</LinearLayout>


1.AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會出Web page not available錯誤。

 2.如果訪問的頁面中有Javascript,則webview必須設定支援Javascript。
        webview.getSettings().setJavaScriptEnabled(true); 

3.如果頁面中連結,如果希望點選連結繼續在當前browser中響應,而不是新開Android的系統browser中響應該連結,必須覆蓋 webview的WebViewClient物件。

webView.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		});


4.如果不做任何處理,瀏覽網頁,點選系統“Back”鍵,整個Browser會呼叫finish()而結束自身,如果希望瀏覽的網 頁回退而不是推出瀏覽器,需要在當前Activity中處理並消費掉該Back事件。

public boolean onKeyDown(int keyCode, KeyEvent event) {
		if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
			webView.goBack();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

5.android中webview支援javascript自定義物件

a.設定webview支援javascript.  webSettings.setJavaScriptEnabled(true);

b.繫結android物件到javascript物件. addJavascriptInterface(Object obj,String interfaceName);

c.頁面中呼叫javascript物件. javascript:window.demo.方法名稱();

在w3c標準中js有 window,history,document等標準物件,同樣我們可以在開發瀏覽器時自己定義我們的物件呼叫手機系統功能來處理,這樣使用js就可以 為所欲為了。

public class WebViewDemo extends Activity {
	private WebView mWebView;
	private Handler mHandler = new Handler();

	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.webviewdemo);
		mWebView = (WebView) findViewById(R.id.webview);
		WebSettings webSettings = mWebView.getSettings();
		webSettings.setJavaScriptEnabled(true);
		mWebView.addJavascriptInterface(new Object() {
			public void clickOnAndroid() {
				mHandler.post(new Runnable() {
					public void run() {
						mWebView.loadUrl("javascript:wave()");
					}
				});
			}
		}, "demo");
		mWebView.loadUrl("file:///android_asset/demo.html");
	}
}

6.WebView控制進度

webView.setWebChromeClient(new WebChromeClient() {

			public void onProgressChanged(WebView view, int progress) {

				setTitle("頁面載入中,請稍候..." + progress + "%");

				setProgress(progress * 100);

				if (progress == 100) {

					setTitle(R.string.app_name);

					progressBar.setVisibility(4);
				}

			}

		});

最後把MainActivity的程式碼貼上

package com.example.webviewdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
	WebView webView;
	ProgressBar progressBar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		webView = (WebView) findViewById(R.id.webView1);
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);
		webView.getSettings().setJavaScriptEnabled(true);
		webView.loadUrl("https://m.empireblue.com/mobile/providerfinder/home");
		webView.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		});
		webView.setWebChromeClient(new WebChromeClient() {

			public void onProgressChanged(WebView view, int progress) {

				setTitle("頁面載入中,請稍候..." + progress + "%");

				setProgress(progress * 100);

				if (progress == 100) {

					setTitle(R.string.app_name);

					progressBar.setVisibility(4);
				}

			}

		});

	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
			webView.goBack();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

相關推薦

webview的使用方法介紹

本文主要講解WebView的一些常用使用方法 程式碼如下: xml檔案: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http

解決單個dex方法數超過65535的方法

ati oid 超過 sta get ble text enabled 方法 1、百度下載 60K-methods.jar包,復制至libs文件夾中,添加到gradle中 2、在build.gradle中的defaultConfig{}下添加 multiDexEnable

H5 --(解決)webviewline-height等於height不垂直居中問題

問題描述:用rem適配的H5頁面在安卓的webview中,當line-height等於height時,有時會稍微偏上一些,不能垂直居中(ps:ios上沒有這個問題) 1、分析原因:由於用rem作適配,則根元素的字型大小可能不是整數,然後將元素的字型大小設定為re

PullToRefreshListview新增頭部的方法

PullToRefreshListView第三方的自定義listview用起來很方便,但是有時候我們需要為這個listview新增頭,由於PullToRefreshListView沒有.addHeaderView方法 這時候新增頭,就有點犯難了。其實加頭只需要一句簡單的程式

的彈窗介面介紹

AlertDialog的使用 介紹 AlertDialog可以在當前介面彈出一個對話方塊,這個對話方塊是置頂於所有的介面元素上,可以遮蔽掉其他控制元件的互動能力,在程式碼中使用靈活簡單。 推薦 這裡推薦一個Git專案,上面提供的比較多的功能: ma

阿拉伯語,波斯語等一些佈局需要翻轉的方法

             在安卓中阿拉伯語系,波斯語系都是一些從右到左的顯示。這時候就需要我們進行適配啦!                                                                                 

為了獲取context的方法和區別(getContext,getActivity,this,mainActivity.this等)

http://blog.csdn.net/wyl_1994/article/details/51605662 1.MainActivity.this:表示MainActivity物件,一般用在內部類中指示外面的this,如果在內部類直接用this,指示的是內部類本身。因

一些常用方法

根據手機的解析度從 dp 的單位 轉成為 px(畫素) :切勿在返回值後面+0.5增加精度 因為在某些低解析度跟高分辨的手機上會有大的誤差 public static int dip2px(Context context, float dpValue) { fin

關於Webview裡面輪播圖衝突問題

Webview的輪播衝突問題。            做專案的時候遇到過這種問題,安卓中載入webview的時候,webview裡面有一個輪播圖,輪播圖自動輪播的時候,沒有問題,  但是當手指上去滑動

讀取xml的幾種方法(有你不知道的)

1.src目錄下,用反射機制載入:Thread.currentThread().getContextClassLoader().getResourceAsStream("xxoo.xml"),以流的方式返回 2.Assest目錄下:Activity.this.getAsse

遮罩圖片的處理

reference south res rac req hat 代碼 cep flag 安卓開發中必不可少的就是各種圖片的圓角,遮罩等等。 曾經我都是用shape處理的。發現背景圖的圓角要設置成和界面父元素背景一樣才幹看不出現紕漏。 當遇到背景多變的情況,比方listv

Bitmap的處理

呼叫安卓手機系統照相機進行拍照 系統照相機得到的相片解析度太大,如果不處理直接使用就會導致OutOfMemery異常,我採用的是下面這段程式碼:// 計算圖片的縮放值public static int calculateInSampleSize(BitmapFactory.Options opt

管理Activity

安卓中一般在BaseActivity 管理所有的Activity 因為所有的Activity 繼承自BaseActivity 步驟: 1:在BaseActivity New 一個ArrayList 儲存Activity private List<Activity> allA

探索java與json物件與json字串之間的關係

  前段時間一直在跟json資料打交道,從一開始的什麼都不懂,到現在整合了許多知識的懵懂,還是收穫了不少對於json格式資料新的看法和安卓資料傳輸的理解。   首先,json資料的格式是什麼樣的呢?我們來定義一個字串型別的json資料。  String json

遇見的一些問題

Android-studio程式碼中遇到的一些問題-----持續更新記錄 1、安卓studio gradle正常編譯執行時找不到library包 圖片描述 解決辦法 將library專案下的build.gradle->buildTypes{

Cordova - 徹底搞定的微信支付插件!

以及 andro 發現 bug 輸入參數 為我 開始 如何 工具 你看到這個標題肯定會驚訝,一個Cordova的微信支付插件,有這麽誇張嗎?信不信由你,我相信,最終你會回來看這篇文章的! 一,不要使用的微信支付插件:https://github.com/xu-li/cord

Cordova - 徹底搞定的微信支付外掛!

Cordova:8.0.0 Android studio:3.2.1 你看到這個標題肯定會驚訝,一個Cordova的微信支付外掛,有這麼誇張嗎? 一,不要使用的微信支付外掛:https://github.com/xu-li/cordova-plugin-wechat  上面的外掛,是目前大家

關於的Handler

Handler是用來執行緒間傳遞資料,在主執行緒將Handler例項化,子執行緒《工作執行緒,執行較長的耗時業務》可以通過Handler傳送資料到主執行緒,當Looper輪詢到Message Queue時,將訊息交給 Handler進行處理,通過回撥handleMessage(Message m

使用webview一鍵截長圖寬圖

安卓使用webView一鍵截長圖寬圖 專案中webView要截圖,但是不同手機又不能滿足截圖需要, 增加一個 “截圖” 功能! 可以擷取 超出螢幕的長圖和寬圖 效果圖 honor 6x的橫屏的下不支援截長圖 (原表格內容是可上下左右滑動

如何使用Sensor simulator 在模擬器上進行感測器開發

大家好啊,這是本人的第一篇部落格,最近在搞安卓的感測器開發,在這篇文章裡我詳述了基於SensorSimulator的感測器開發步驟。使用SensorSimulator可以在沒有手機的情況下在電腦上模擬手機的姿態,來測試比如像用到方向感測器一類的程式。希望對大家有所幫助。 0.啟動eclipse,