![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOwATMmJzMwYTN5QDZwATOilDO4EjMxMGO2QjM1ImN28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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];
參考連接配接