随着使用h5和其他前端技术开发的webapp 应用越来越多,使用原生开发的app 有时候需要嵌入一些新的网页,众所周知webview控件中可以加载网页。下面就一些使用方法进行简单的小结,其实使用技巧还是蛮多的。
网络上相关文章:
点击打Android混合开发之WebView与Javascript交互开链接
感谢博主。
0.WebView的实质就是loadUrl,所以前提是设备接入网络,首先进行网络的判断。
添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
网络状态的判断:
<span style="font-size:14px;">// 网络状态
public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager
.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
</span>
这只是最简单的网络判断,当然是可以进行更细致的判断,比如无线,4G 等。
1.只让本应用程序的webview加载网页而不调用外部浏览器的办法
设置WebViewClient,并重写WebViewClient的shouldOverrideUrlLoading方法返回true。系统默认返回的是false。
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
});
2.网页加载完成与加载失败的监听。
重写WebViewClient即可。然后进行设置 mwebView.setWebViewClient(new webClient());
private class webClient extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// TODO Auto-generated method stub
super.onReceivedError(view, errorCode, description, failingUrl);
view.loadUrl("file:///android_asset/defaultpage/index.html"); //加载一个默认的网页
}
}
3.webView相关属性的设置。
WebSettings webSettings = webView.getSettings();
webSettings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true); // 充满全屏幕
webSettings.setBuiltInZoomControls(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
// 设置缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 开启 DOM storage API 功能
webSettings.setDomStorageEnabled(true);
webView.setHorizontalScrollBarEnabled(false); // 水平不显示滚动条
webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // 禁止即在网页顶出现一个空白,又自动回去。
webView.setWebChromeClient(new webChromClient());
webView.setWebViewClient(new webClient());
附一个示例代码:布局文件比较简单,放了一个WebView控件.
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class HtmlInfoActivity extends Activity {
private WebView webView;
// guo add
private ProgressDialog dialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.systemsinfo_layout);
webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true); // 充满全屏幕
webSettings.setBuiltInZoomControls(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
// 设置缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 开启 DOM storage API 功能
webSettings.setDomStorageEnabled(true);
webView.setHorizontalScrollBarEnabled(false); // 水平不显示滚动条
webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // 禁止即在网页顶出现一个空白,又自动回去。
webView.setWebChromeClient(new webChromClient());
webView.setWebViewClient(new webClient());
// Intent intent = getIntent();//得到上一个Activity传递的值
// String str=intent.getStringExtra("url");
String str = "https://www.baidu.com";
dialog = ProgressDialog.show(HtmlInfoActivity.this, null, "正在加载中,请稍后···");
webView.loadUrl(str);
}
private class webChromClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
super.onProgressChanged(view, newProgress);
}
}
private class webClient extends WebViewClient {
@Override
public void onPageStarted(final WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
// super.onPageFinished(view, url);
dialog.dismiss();
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// TODO Auto-generated method stub
super.onReceivedError(view, errorCode, description, failingUrl);
// guo add
Toast.makeText(HtmlInfoActivity.this, "网页加载出错!", Toast.LENGTH_LONG).show();
view.loadUrl("file:///android_asset/defaultpage/index1.html"); // 加载一个默认的本地网页
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
// 网络状态判断
public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
}