Android開發--------------WebView(二)之WebView的滑動底部頂部監聽,載入進度條等設定

來源:互聯網
上載者:User

標籤: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 = "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;@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="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;}@Overridepublic void onProgressChanged(WebView view, int newProgress) {bar.setProgress(newProgress);}@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);//tvTitle.setText(title);}});


onProgressChanged這個方法返回,然後在setWebViewClient裡面的onPageStarted和onPageFinished控制進度條的顯示於隱藏


4.獲得網頁標題

在webview.setWebChromeClient(new WebChromeClient() 裡面的onReceivedTitle裡可以得到網頁標題

Android開發--------------WebView(二)之WebView的滑動底部頂部監聽,載入進度條等設定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.