android中自定义WebView显示网页或本地html文件
16lz
2021-01-26
由于最近项目部分需求要访问网页查阅信息,如:学历查询,学位查询,英语四六级查询等。
在这里总结下完成的方式,难度也不算大。自定义带进度条的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 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" />
更多相关文章
- Android的Menu键监听
- android手写签名遇见bitmap黑屏和本地html插入签名图片
- Android(安卓)版本兼容 — Android(安卓)4.4 后根据系统 Uri 查
- File
- Android(安卓)GestureDetector ScaleGestureDetector
- Android加载通话记录流程分析
- android 通过Intent打开相册并获取选择的图片
- android点击事件
- android中google“定位查询”编辑