android中自定义WebView显示网页或本地html文件

由于最近项目部分需求要访问网页查阅信息,如:学历查询,学位查询,英语四六级查询等。

在这里总结下完成的方式,难度也不算大。

自定义带进度条的WebView控件:

package app.ui.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.widget.ProgressBar;
/**
 * 自定义WebView带进度条
 * @author gaochun
 *
 */
@SuppressWarnings("deprecation")
public class ProgressWebView extends WebView {
   
    private ProgressBar progressbar; /** 进度条 */

    public ProgressWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // 初始化进度条
        progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
        // 设置进度条风格
        progressbar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 5, 0, 0));
        addView(progressbar);
        setWebChromeClient(new WebChromeClient());

    }

    public class WebChromeClient extends android.webkit.WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (newProgress == 100) {
                progressbar.setVisibility(GONE);    // 加载完成隐藏进度条
            } else {
                if (progressbar.getVisibility() == GONE)
                    progressbar.setVisibility(VISIBLE);
                progressbar.setProgress(newProgress);
            }
            super.onProgressChanged(view, newProgress);
        }
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        LayoutParams lp = (LayoutParams) progressbar.getLayoutParams();
        lp.x = l;
        lp.y = t;
        progressbar.setLayoutParams(lp);
        super.onScrollChanged(l, t, oldl, oldt);
    }
}


在xml中使用:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/content_padding" >

    <app.ui.widget.ProgressWebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/tv_error"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center|center_vertical"
        android:text="查询失败"
        android:visibility="gone" />

</FrameLayout>

在Activity中使用:

/*******************************************************************************
 *
 * Copyright (c) Weaver Info Tech Co. Ltd
 *
 * SelectActivity
 *
 * app.ui.activity.service.SelectActivity.java
 * TODO: File description or class description.
 *
 * @author: Administrator
 * @since:  2014-5-16
 * @version: 1.0.0
 *
 * @changeLogs:
 *     1.0.0: First created this class.
 *
 ******************************************************************************/
package app.ui.activity.service;

import mobi.kuaidian.qunakao.R;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import app.ui.widget.ProgressWebView;
/**
 * @author Administrator
 *
 */
public class ResultActivity extends Activity{

	public static final String SELECT_XUELI = "http://www.chsi.com.cn/xlcx/lscx.jsp";   //学历查询地址

    private ProgressWebView mWebView;
    private WebSettings mWebSettings;

    /* (non-Javadoc)
     * @see app.ui.TitleActivity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setUpViews();
    }


    private void setUpViews()
    {
        setContentView(R.layout.activity_result);
        showBackwardView(R.string.button_backward, true);
        mWebView = (ProgressWebView)findViewById(R.id.webview);
		mWebView.loadUrl(BaseActivity.SELECT_XUELI);


        mWebSettings = mWebView.getSettings();
        mWebSettings.setJavaScriptEnabled(true);    //允许加载javascript
        mWebSettings.setSupportZoom(true);          //允许缩放
        mWebSettings.setBuiltInZoomControls(true);  //原网页基础上缩放
        mWebSettings.setUseWideViewPort(true);      //任意比例缩放

		/*****************************************************************
		 * 在点击请求的是链接时才会调用,重写此方法返回true表明点击网页里
		 * 面的链接还是在当前的WebView里跳转,不会跳到浏览器上运行。
		 *****************************************************************/
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
    }

    /***********************************************************
     * 监听返回键
	 * 注:这里的返回键是指在加载的网页中进入了另一个连接,点击返回
     ***********************************************************/
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

AndroidManifest.xml添加权限:

<uses-permission android:name="android.permission.INTERNET" />



效果图显示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值