webview尝试(一)在线加载网页(例百度)
webview布局很简单xml如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical" >
<WebView
android:id="@+id/webView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layerType="software" />
</RelativeLayout>
对应的activity的Webview_try逻辑代码如下
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Webview_try extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview_try);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.hide();
}
mWebView = (WebView) findViewById(R.id.webView1);
// 设置WebView的客户端
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;// 返回false
}
});
//baiduboxapp:
//webView加载网页后出现ERR_UNKNOWN_URL_SCHEME
/*mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try{
if(url.startsWith("baiduboxapp://")){
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}catch (Exception e){
return false;
}
mWebView.loadUrl(url);
return true;
}
});*/
WebSettings webSettings = mWebView.getSettings();
// 让WebView能够执行javaScript
webSettings.setJavaScriptEnabled(true);
// 让JavaScript可以自动打开windows
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 设置缓存
webSettings.setAppCacheEnabled(true);
// 设置缓存模式,一共有四种模式
webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);
// 设置缓存路径
// webSettings.setAppCachePath("");
// 支持缩放(适配到当前屏幕)
webSettings.setSupportZoom(true);
// 将图片调整到合适的大小
webSettings.setUseWideViewPort(true);
// 支持内容重新布局,一共有四种方式
// 默认的是NARROW_COLUMNS
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// 设置可以被显示的屏幕控制
webSettings.setDisplayZoomControls(true);
// 设置默认字体大小
webSettings.setDefaultFontSize(12);
// 设置WebView属性,能够执行Javascript脚本
// mWebView.getSettings().setJavaScriptEnabled(true);
//3、 加载需要显示的网页
mWebView.loadUrl("http://www.baidu.com/");
///4、设置响应超链接,在安卓5.0系统,不使用下面语句超链接也是正常的,但在MIUI中安卓4.4.4中需要使用下面这条语句,才能响应超链接
// mWebView.setWebViewClient(new HelloWebViewClient());
}
// 设置回退监听
// 5、覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) ) {
if (mWebView.canGoBack())
{
mWebView.goBack(); //goBack()表示返回WebView的上一页面
return true;
}else
{
finish();
return true;
}
}
return false;
}
}
出现和需要注意的点有
①设置退回监听,没有监听的控制的话点击返回会直接退出
②网页加载出来之后,点击网页中的一些连接会出现ERR_UNKNOWN_URL_SCHEME此类错误,此时可以通过mWebView.setWebViewClient(new WebViewClient()来进行简单的操作,让非http的网页链接出来
③适当配置显示,这样针对不同网页不同手机显示才能相对正常美观
本人参考了https://www.2cto.com/kf/201609/548747.html