在项目中或多或少会用到网页加载,这就要使用WebView了。项目做多了就会发现,如果有一个通用的模板,做起来就会即省时、又省力,高高兴兴的。这篇文章要做的就是总结一下我过去所用到的一些关于WebView的东西,可能不是那么全面,毕竟是个人的见解嘛。
直接上代码:
第一步:xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="10dp"/>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
第二部:网络权限
<uses-permission android:name="android.permission.INTERNET"/>
第三部:java代码
public class WebViewActivity extends AppCompatActivity {
private ProgressBar progress;
private WebView webView;
private String url = "https://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
initViews();
initWeb();
}
private void initWeb() {
//加载本地资源
// webView.loadUrl("file:///android_asset/demo.html");
//加载web资源
webView.loadUrl(url);
//加载网页内容 body 网页内容
//webView.loadData(body, "text/html; charset=UTF-8", null);
WebSettings settings = webView.getSettings();
// 让WebView能够执行javaScript
settings.setJavaScriptEnabled(true);
settings.setDefaultTextEncodingName("UTF-8");
//让JavaScript可以自动打开windows
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//优先使用缓存
// settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用缓存
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
return true;
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
// 网页加载完成
progress.setVisibility(View.INVISIBLE);
} else {
// 加载中
if (View.INVISIBLE == progress.getVisibility()) {
progress.setVisibility(View.VISIBLE);
}
progress.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
});
}
private void initViews() {
progress = (ProgressBar) findViewById(R.id.progress);
webView = (WebView) findViewById(R.id.webview);
}
//重写物理返回键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack();//返回上一页面
return true;
} else {
finish();//退出
}
}
return super.onKeyDown(keyCode, event);
}
}
备注:
1、如果要调用js的方法,可以按下列操作。
webView.loadUrl(javascript:test('str')");
其中,test(‘str’)为js的方法,’str’为参数。