什么是WEBVIEW
在activity里面显示网页的控件;
具备加载,解析,显示网页的功能;
使用方法:
(1).在布局中加入WebView组件;
(2).在程序调用时加入webView的loadURL()方法指定要加载的网址;
(3).在Manifest文件中设置因特网的使用权限。
默认只有显示网页的简单功能,按了系统默认返回键会自动退出程序。
Webview使用的最佳实例
wv = (WebView) findViewById(R.id.wv);
wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wv.getSettings().setSupportMultipleWindows(true);
wv.setWebViewClient(new WebViewClient());
wv.setWebChromeClient(new WebChromeClient());
wv.loadUrl("http://www.baidu.com");
如果采用下面这个方法的话,虽然不会跳转到系统的浏览器,但是不支持js等功能,因设置webSetting
//wv.setWebViewClient(new WebViewClient(){
//@Override
//public boolean shouldOverrideUrlLoading(WebView view, String url) {
//return false;
//}
//});
其中用到了android.webkit程序包里面的其他类,最重要的就是
WebSettings 用于控制webView的基本设置,例如启动网页缩放和启用javaScript功能 ;
WebViewClient 用于控制WebView本身的行为,通过此类对象,可以获取网页相关事件,例如,想在用户单击网页中的超链接,网页加载的开始/结束等时机进行控制;
WebChromeClient 用于制作和网页有关,但属于WebView之外的效果,例如例如想要在载入页面时候显示进度
webkit是一套开放源码的浏览器引擎。
要求重写onKeyDown方法,捕捉logcat的报错
UnimplementedWebViewApi(4510): Unimplemented WebView method
onKeyDown
called from: android.webkit.WebView.onKeyDown(WebView.java:2169)
一切的起源都得通过webview对象的getSetting()方法获取webSetting对象
Progress的分类
1.有进度的进度条
ProgressBar(Large)
ProgressBar(Normal)
ProgressBar(Small)
2.没有进度的转圈圈
ProgressBar(Horizontal)
//wv.getSettings().setSupportZoom(true);//启用缩放功能,不正常关闭会引起窗体泄露,这行代码影响的
//尽量避免使用放大缩小工具
ProgressBar的使用
setProgress(int progress) 来改变进度值
OnBackPressed() 实现回上一页功能
@Override
public void onBackPressed() {
if(wv.canGoBack()){
wv.goBack();
return;
}
//系统默认直接退出当前webView
super.onBackPressed();
}
用来处理显示进度
wv.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//第一个参数是正在载入的webView,第二个参数是进度值
//加入自己的进度显示处理程序
pb.setProgress(newProgress);
pb.setVisibility(newProgress <100?View.VISIBLE:View.GONE);
}
});//创建网页开启进度接口
其他的常用方法
wv.zoomIn();//放大
wv.zoomOut();//缩小
webview测试源码
package com.yqq.webview;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.widget.ProgressBar;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private WebView wv;
private ProgressBar pb;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//必须在setContentView()前面
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//webView使用的最佳实践
wv = (WebView) findViewById(R.id.wv);
//wv.getSettings().setSupportZoom(true);//启用缩放功能,不正常关闭会引起窗体泄露,这行代码影响的
//wv.invokeZoomPicker();//显示缩放小工具不正常关闭会引起窗体泄露,这行代码影响的
wv.getSettings().setBuiltInZoomControls(true);//启用缩放工具,
wv.getSettings().setJavaScriptEnabled(true); //启用javaScipt功能
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//启用自动开启多窗口
wv.getSettings().setSupportMultipleWindows(true); //启用多窗口功能
//自适应屏幕
wv.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
wv.getSettings().setLoadWithOverviewMode(true);
wv.setWebViewClient(new WebViewClient(){
});//用于处理开启超链接操作
wv.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//第一个参数是正在载入的webView,第二个参数是进度值
//加入自己的进度显示处理程序
pb.setProgress(newProgress);
pb.setVisibility(newProgress <100?View.VISIBLE:View.GONE);
}
});//创建网页开启进度接口
wv.setInitialScale(0);//设置缩放比例
wv.loadUrl("http://www.baidu.com");
// wv.setWebViewClient(new WebViewClient(){
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url) {
// view.LoadUrl();
// return super.shouldOverrideUrlLoading(view, url);
// }
// });
pb = (ProgressBar) findViewById(R.id.pb);
}
@Override
public void onBackPressed() {
if(wv.canGoBack()){
wv.goBack();
return;
}
//系统默认直接退出当前webView
super.onBackPressed();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
对应的布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<ProgressBar
android:id="@+id/pb"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-6dp"/>
<WebView
android:id="@+id/wv"
android:layout_below="@+id/pb"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>