Android开发--------------WebView(二)之WebView的滑动底部顶部监听,加载进度条等设置

整理一下WebView的一些常用设置,滑动监听,让跳转的页面也在WebView里显示,加载进度,获得标题等等

一,滑动监听

滑动监听的话是需要在WebView基础之上在加强一下,因为在WebView没有直接监听滑动的方法,看WebView的源码则会发现有一个

protected void onScrollChanged(int l, int t, int oldl, int oldt) ;

这个方法。是受到保护的所以我们无法直接使用,所以我们写一个加强的WebView,利用接口回调。

ScrollWebView

package com.song.webviewtest;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebView;
/**
 * Title: ScrollWebView.java
 * Description:
 * @author Liusong
 * @version V1.0
 */
public class ScrollWebView extends WebView {
	public OnScrollChangeListener listener;

	public ScrollWebView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public ScrollWebView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public ScrollWebView(Context context) {
		super(context);
	}

	@Override
	protected void onScrollChanged(int l, int t, int oldl, int oldt) {

		super.onScrollChanged(l, t, oldl, oldt);

		float webcontent = getContentHeight() * getScale();// webview的高度
		float webnow = getHeight() + getScrollY();// 当前webview的高度
		Log.i("TAG1", "webview.getScrollY()====>>" + getScrollY());
		if (Math.abs(webcontent - webnow) < 1) {
			// 已经处于底端
			// Log.i("TAG1", "已经处于底端");
			listener.onPageEnd(l, t, oldl, oldt);
		} else if (getScrollY() == 0) {
			// Log.i("TAG1", "已经处于顶端");
			listener.onPageTop(l, t, oldl, oldt);
		} else {
			listener.onScrollChanged(l, t, oldl, oldt);
		}

	}

	public void setOnScrollChangeListener(OnScrollChangeListener listener) {

		this.listener = listener;

	}

	public interface OnScrollChangeListener {
		public void onPageEnd(int l, int t, int oldl, int oldt);
		public void onPageTop(int l, int t, int oldl, int oldt);
		public void onScrollChanged(int l, int t, int oldl, int oldt);

	}

}

然后,利用这个加强的WebView就可以监听了

package com.song.webviewtest;

import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.webkit.WebSettings;

import com.song.webviewtest.ScrollWebView.OnScrollChangeListener;

public class WebViewActivity extends Activity {
	private String url = "http://192.168.30.199:8080/song/test.html";

	//执行动作
	public static final int SELECT_IMAGE = 0;// 打开图库
	public static final int OPEN_PAGE = 1;// 跳转其他特定页面
	public static final int CLOSE_OR_BACK = 2;// 关闭或

	private ScrollWebView mWebView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_webviw);
		getIntentDatas();
		initView();

	}

	private void getIntentDatas() {
		// TODO Auto-generated method stub
		url = getIntent().getStringExtra("url");
	}

	private void initView() {
		mWebView = (ScrollWebView) findViewById(R.id.webview);
		//或的WebView的Setting
		WebSettings settings = mWebView.getSettings();
		//设置支持js,看方法名字就知道啥意思
		settings.setJavaScriptEnabled(true);
		//mWebView.addJavascriptInterface(new JavaScriptInterface(handler), "Android");

		mWebView.setOnScrollChangeListener(new OnScrollChangeListener() {

			@Override
			public void onScrollChanged(int l, int t, int oldl, int oldt) {
				//滑动中
			}

			@Override
			public void onPageTop(int l, int t, int oldl, int oldt) {
				//滑动到顶部
			}

			@Override
			public void onPageEnd(int l, int t, int oldl, int oldt) {
				//滑动到底部
			}
		});
		//加载网页路径
		mWebView.loadUrl(url);
	}

}

2.让web页面一直在WebView里面显示

这需要用到setWebViewClient这个方法,在上面代码里加上这一句就可以了

webview.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
				// Log.i("TAG", "url--=====>>>" + url);
				view.loadUrl(url);
				return true;
			}

			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				bar.setVisibility(View.VISIBLE);
				progBar.setVisibility(View.VISIBLE);
				// Log.i("TAG", "开始");
			}

			@Override
			public void onPageFinished(WebView view, String url) {
				// Log.i("TAG", "结束");
				bar.setVisibility(View.GONE);
			}

		});

重写public boolean shouldOverrideUrlLoading(WebView view, String url) ,在里面加上view.loadUrl(url);就ok了。

3.然后是加载进度条

需要setWebViewClient和setWebChromeClient配合使用,

首先要在不布局里加上progressBar控件,具体样式自己定义把

<LinearLayout 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:orientation="vertical" >

    <include layout="@layout/web_top" />

    <ProgressBar
        android:id="@+id/webProgress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:maxHeight="3dip"
        android:minHeight="3dip"
        />

    <com.appsino.bingluo.fycz.ui.web.ScrollWebView
        android:id="@+id/wv_load"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

然后就是获得控件,

	bar = (ProgressBar) findViewById(R.id.webProgress);
	bar.setMax(100);

然后就是设置了,在setWebChromeClien里面有具体的方法返回页面加载进度

webview.setWebChromeClient(new WebChromeClient() {

			public boolean onConsoleMessage(ConsoleMessage cm) {

				return true;
			}

			@Override
			public void onProgressChanged(WebView view, int newProgress) {
				bar.setProgress(newProgress);
			}

			@Override
			public void onReceivedTitle(WebView view, String title) {
				super.onReceivedTitle(view, title);
				//tvTitle.setText(title);
			}

		});

onProgressChanged这个方法返回,然后在setWebViewClient里面的onPageStarted和onPageFinished控制进度条的显示于隐藏

4.获得网页标题

在webview.setWebChromeClient(new WebChromeClient() 里面的onReceivedTitle里可以得到网页标题

时间: 2024-11-03 21:17:54

Android开发--------------WebView(二)之WebView的滑动底部顶部监听,加载进度条等设置的相关文章

【android】带加载进度条的WebView (附demo下载)

/** * * 此WebViewWithProgress继承自Relativielayout, * 如果要设置webview的属性,要先调用getWebView()来取得 * webview的实例 * * @author Administrator * */ public class WebViewWithProgress extends RelativeLayout{ private Context context; private WebView mWebView = null; //水平进

给WebView添加漂亮的加载进度条

为了增强用户体验,所有在WebView头部给加了个进度条,看起来不错哦. 布局XMl:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent&q

webView 加载进度条,webView返回键重写机制

1.图片延时加载 brower = (WebView) this.findViewById(R.id.brower); settings = brower.getSettings(); settings.setJavaScriptEnabled(true); //阻塞图片下载 settings.setBlockNetworkImage(true); private class Client extends WebViewClient     {         @Override        

webview添加网页加载进度条

最近在android项目中使用webview嵌套了一个抽奖活动网页,活动上线,运行良好(改了N次需求和突发bug),还好这种模式的活动,只需要修改网页,不需要重新打包发布市场,这也是这种模式开发的优势之一.后来据产品哥反馈说加载网页无进度提示,好吧,这个当时真没考虑这么多,这个要加加..想当然以为轻松搞定之....其实还是比轻松要复杂点... 1.首先自定义一个WebView控件 1 /** 2 * 带进度条的Webivew 3 * @author [email protected] 4 */

网页加载进度条的JS程序开发思路与实际应用

一款好的产品,都需要有一个漂亮的loading界面.lodaing界面不仅能给用户带来良好的体验,而且有效的消除了程序加载等待过程中的枯躁感. loading进度条更是对当前加载进度的一个良好反馈.从0%-100%的加载进度可以有效的告知用户还有多久即可打开页面.带有进度条的loading界面在程序中并不罕见,但是在web中呢?到目前为止浏览器并没有提供有效的浏览器对象来反馈页面的加载进度,所以无法直接.便捷的获得页面加载进度的反馈.本文主要是讲述如何以通过jquery的方式来实现页面加载进度的

【WebView】带加载进度条的WebView及Chrome联调

先看效果图: 看到顶部蓝色的进度条了. 原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的.所以普通的WebView是无法实现进度条的. 下面直接上干货: /** * ProgressWebView * * @author lif * * */ @SuppressWarnings("deprecation") public class Progres

webview设置加载进度条、屏蔽跳转到默认浏览器、对话框

package cn.itcast.design.note5.webview; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.W

Android ProgressBar实现加载进度条

progressBar Android进度条组件. progressBar的关键属性: android:max="100"     最大显示进度条 android:progress="500"     第一显示进度 android:secondaryProgress="80"     第二显示进度 android:indeterminate="true"     设置是否精确显示 progressBar的关键方法: setPr

WebView 自定义错误界面,WebView 加载进度条,和Logding 效果

---恢复内容开始--- 下载地址,代码就不粘贴了 http://pan.baidu.com/s/1eQncg86 ---恢复内容结束--- 我没有判断是不是网络原因,各位自行判断吧,图片错误信息,及重现加载各种美化的样式请自己写吧,右边的是加载网页的进度条 里面还有一个弹出的dialog 的加载效果, 地址 http://www.cnblogs.com/Mr-Wu/p/4187934.html