天天看點

android中webview的使用以及總結,Android WebView 使用總結

android中webview的使用以及總結,Android WebView 使用總結

8種機械鍵盤軸體對比

本人程式員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎麼選?

WebView的基本用法AndroidManifest.xml 添加網絡通路權限

XML添加一個 ,Java 中WebView webView = (WebView) findViewById(R.id.webView);

然後加載網頁,

```

//加載網頁

webView.loadUrl(“http://www.douban.com”);

//加載本地網頁

webView.loadUrl(“file:///android_asset/test.html”);

//加載字元串

String htmlString = “

This is HTML text

”;

webView.loadData(htmlString, “text/html”, “utf-8”);

```

根據XX不同,分為WebViewClient、WebChromeClient、WebSettings。WebViewClient處理各種通知、請求事件;WebChromeClient輔助處理Javascript的對話框、加載進度等;WebSettings負責Settings,像緩存等,此處隻簡單介紹不按上文結構。

shouldOverrideUrlLoading()

初次 使用上面的loadUrl時會調用,return true則在目前webview裡處理頁面(單頁面)。

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

還可以根據字尾名過濾apk,自己處理下載下傳等事件。

JS調用Android

啟用JS

webView.getSettings().setJavaScriptEnabled(true);

添加JS接口: webView.addJavascriptInterface(new JsInterface(this), "AndroidWebView");

重寫:

private class JsInterface {

private Context mContext;

public JsInterface(Context context) {

this.mContext = context;

}

//在js中調用window.AndroidWebView.putTokentoJs()觸發此方法。

//4.2+ 需要加下面這行

@JavascriptInterface

public String putTokentoJs() {

return token;

}

}

Android調用JS

onJSAlert、onJsPrompt、onJSConfirm

@Override

public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

//balabalabala

new AlertDialog.Builder(getActivity()).setMessage(message).setNegativeButton("YES", null).show();

//result.confirm();

return true;

}

另外logcat也可以列印console,不過碰到[object Object]就無能為力了,不過可以用下面的Chrome遠端調試。

### Chrome遠端調試WebViewChrome32+;USB線連接配接電腦和Android手機;Android4.4+ 安裝了Chrome;

在手機中開啟開發者模式(4.4+點七次系統版本号),開啟 USB調試;

在電腦端打開chrome://inspect,選中 發現USB硬體 ;

開啟WebView調試還要在App下添加下面這句:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

WebView.setWebContentsDebuggingEnabled(true);

}

發現硬體後inspect 就可以像調試普通網頁一樣調試Android中的WebView了。

其他用法見連結,此處隻說WebView:

WebSettings Webkit中的實作

WevView緩存

重寫傳回鍵:goBack()和再按一次退出

private boolean mIsExit = false;

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

//如果是KEYCODE_BACK 且 canGoBack()就goBack()

if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {

webView.goBack();

toolbar.setVisibility(View.GONE);

bottomBar.setVisibility(View.VISIBLE);

mReward.setVisibility(View.GONE);

return true;

} else if ((keyCode == KeyEvent.KEYCODE_BACK) && !mIsExit) {

//如果隻是KEYCODE_BACK則提示是否退出,1000内再按就退出

mIsExit = true;

new Handler().postAtTime(new Runnable() {

@Override

public void run() {

mIsExit = false;

}

}, SystemClock.uptimeMillis() + 1000);

Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();

return false;

}

finish();

return super.onKeyDown(keyCode, event);

}

項目中的使用

除了上面提到的,下面幾個也用在了項目中:onProgressChanged 此處根據加載進度寫一個動畫效果。

onReceivedTitle 據此用來作為Toolbar的标題或者後續的使用。

webview.reload() 評論成功後重新整理。

onReceivedError() 用來處理錯誤,比如404替換成錯誤頁。

onPageStarted() 在這裡用getUrl()),從中過濾出文章ID之類的,同時根據getUrl().length()判斷是首頁還是其他頁面,進而決定Toolbar的顯示樣式。

從getUrl()過濾出文章id

String[] parts = url.split("newsId=");

parts = parts[1].split("&token");

docid = parts[0];

參考連接配接