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);}@Overrideprotected 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 = ":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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webviw);getIntentDatas();initView();}private void getIntentDatas() {// TODO Auto-generated method stuburl = getIntent().getStringExtra("url");}private void initView() {mWebView = (ScrollWebView) findViewById(R.id.webview);//或的WebView的SettingWebSettings settings = mWebView.getSettings();//设置支持js,看方法名字就知道啥意思settings.setJavaScriptEnabled(true);//mWebView.addJavascriptInterface(new JavaScriptInterface(handler), "Android");mWebView.setOnScrollChangeListener(new OnScrollChangeListener() {@Overridepublic void onScrollChanged(int l, int t, int oldl, int oldt) {//滑动中}@Overridepublic void onPageTop(int l, int t, int oldl, int oldt) {//滑动到顶部}@Overridepublic 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;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {bar.setVisibility(View.VISIBLE);progBar.setVisibility(View.VISIBLE);// Log.i("TAG", "开始");}@Overridepublic 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=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><include layout="@layout/web_top" /><ProgressBarandroid: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.ScrollWebViewandroid:id="@+id/wv_load"android:layout_width="match_parent"android:layout_height="match_parent" />

然后就是获得控件,

bar = (ProgressBar) findViewById(R.id.webProgress);bar.setMax(100);可以有一个人陪着你,也可以你一个人,总之那一刻,

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

相关文章:

你感兴趣的文章:

标签云: