您的位置:首页 > 移动开发

Android-WebView网页访问方法

2016-04-21 15:08 441 查看
目标效果:









打开程序显示一个进度条的对话框,加载完成是一个新闻页面。点击某个新闻进入还是现实一个进度条对话框,加载完成是具体的新闻内容。

1.activity_main.xml页面放置WebView控件。

activity_main.xml页面:

<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>


2.MainActivity.java处理Webview的页面加载等信息。
MainActivity.java页面:
package com.example.webview;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

private WebView webview;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/*处理WebView的方法*/
init();
}

private void init() {
webview=(WebView) findViewById(R.id.webview);
webview.loadUrl("http://2014.qq.com");//加载网页
//webview.loadUrl("file:///android_asset/fadeIn.html");//加载本地html页面

/*覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在WebView中打开,WebViewClint帮助WebView去处理一些页面控制和请求*/
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;    //返回值是true的时候控制网页在WebView中去打开,如果为false调用下同浏览器或第三方浏览器去打开
}
});
/*启用支持javascript*/
WebSettings settings=webview.getSettings();
settings.setJavaScriptEnabled(true);
/*WebView加载页面优先使用缓存加载*/
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

/*设置进度条对话框*/
webview.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){      //newprogress是一到一百中的整数,反正加载进度
/*网页加载完毕,关闭ProgressDialog*/
closeDialog(newProgress);
}else{
/*网页正在加载,打开ProgressDialog*/
openDialog(newProgress);
}
super.onProgressChanged(view, newProgress);
}

private void openDialog(int newProgress) {
if(dialog==null){           //如果dialog为空,代表没有被创建过,需要创建
dialog=new ProgressDialog(MainActivity.this);   //参数为上下文环境
dialog.setTitle("正在加载...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //横向进度条
dialog.setProgress(newProgress);     //设置进度并显示
dialog.show();          //显示进度条
}else{          //若dialog不为空,代表进度条已经被创建
dialog.setProgress(newProgress);    //刷新进度
}
}

private void closeDialog(int newProgress) {
if(dialog!=null&&dialog.isShowing()){    //如果dialog不为空并且正在显示
dialog.dismiss();            //关闭dialog
dialog=null;
}
}
});
}

/*改写物理按键--返回的逻辑*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){      //点击返回按钮
if(webview.canGoBack()){             //判断能不能返回上一界面,就是该页面前边是否还有页面
webview.goBack();                //返回上一界面
return true;
}else{                               //如果该页面是第一个页面
System.exit(0);          //退出程序
}
}
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


3.另外,当使用浏览器访问,需要在AndroidManifest.xml页面添加internet权限。





添加后保存就好了。

部分代码分析:
1.
//webview.loadUrl("file:///android_asset/fadeIn.html");//加载本地html页面

MainActivity.java页面中有一条注释起来的代码,是加载本地手动编写的html页面,如果需要加载本地页面,需要将html页面复制到项目下的assets文件夹中,需要注意的是访问路径固定为("file:///android_asset/文件名.html");

2.
/*覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在WebView中打开,WebViewClint帮助WebView去处理一些页面控制和请求*/
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;    //返回值是true的时候控制网页在WebView中去打开,如果为false调用下同浏览器或第三方浏览器去打开
}
});

这一段是设置打开方式,如果不设置默认会让你选择使用第三方浏览器还是系统浏览器,情况如下:



3.
/*WebView加载页面优先使用缓存加载*/
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

这一句是在你打开过一个页面后在本地缓存一部分信息,使你第二次打开时速度加快。

4.
/*改写物理按键--返回的逻辑*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){      //点击返回按钮
if(webview.canGoBack()){             //判断能不能返回上一界面,就是该页面前边是否还有页面
webview.goBack();                //返回上一界面
return true;
}else{                               //如果该页面是第一个页面
System.exit(0);          //退出程序
}
}
return super.onKeyDown(keyCode, event);
}

这一段的作用是在你点开新闻详情阅读后,点击返回界面可以退回新闻目录页面,如果不加这一段,从新闻详情里点击返回键就直接退出程序了。

5.还有一个小问题,是在新闻目录页面点击返回时,需要点击多次才能退出程序,这不是代码的问题,是系统机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: