你的位置:首页 > 操作系统

[操作系统]自定义带进度条的WebView , 增加获取web标题和url 回掉


1、自定义ProgressWebView

package com.app.android05;import android.content.Context;import android.graphics.Bitmap;import android.util.AttributeSet;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.ProgressBar;/** * @author admin * 带进度条的WebView */public class ProgressWebView extends WebView {  private Context context ;  private ProgressBar progressbar ;  private OnWebCallBack onWebCallBack ;  //回调  public ProgressWebView(Context context) {    this( context , null ) ;  }  public ProgressWebView(Context context, AttributeSet attrs) {    this( context , attrs , android.R.attr.webTextViewStyle ) ;  }  public ProgressWebView(Context context, AttributeSet attrs, int defStyle) {    super( context , attrs , defStyle ) ;    this.context = context ;    init() ;     setWebViewClient( new MyWebViewClient() ) ;    setWebChromeClient( new WebChromeClient() ) ;  }  /**   * 设置ProgressBar   */  void init(){    progressbar = new ProgressBar( context , null , android.R.attr.progressBarStyleHorizontal);    progressbar.setLayoutParams( new LayoutParams(LayoutParams.MATCH_PARENT, 20 , 0, 0 ));    addView( progressbar ) ;  }  public class WebChromeClient extends android.webkit.WebChromeClient {    @Override    public void onProgressChanged(WebView view, int newProgress) {      if (newProgress == 100) {        progressbar.setVisibility(GONE);      } else {        progressbar.setVisibility( VISIBLE ) ;         progressbar.setProgress(newProgress);      }      super.onProgressChanged(view, newProgress);    }            @Override    public void onReceivedTitle(WebView view, String title) {      super.onReceivedTitle(view, title);      if( onWebCallBack != null ){ //获取标题        onWebCallBack.getTitle( title ) ;      }    }      }  /**   * 不重写的话,会跳到手机浏览器中   * @author admin   */  public class MyWebViewClient extends WebViewClient {    @Override    public void onReceivedError(WebView view, int errorCode,        String description, String failingUrl) { // Handle the      goBack() ;    }    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {      view.loadUrl(url);      return true;    }    @Override    public void onPageFinished(WebView view, String url) {      super.onPageFinished(view, url);    }        @Override    public void onPageStarted(WebView view, String url, Bitmap favicon) {      if( onWebCallBack != null ){ //获得WebView的地址        onWebCallBack.getUrl( url ) ;      }    }  }  @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);  }    /**   * 设置WebView的回掉器   * @param onWebCallBack   */  void setOnWebCallBack ( OnWebCallBack onWebCallBack ){    this.onWebCallBack = onWebCallBack ;  }    }interface OnWebCallBack{  /**   * 获取标题   * @param title   */  void getTitle( String title ) ;    /**   * 获得WebView的地址   * @param url   */  void getUrl( String url ) ;}

 

2、

<RelativeLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context="com.app.android05.MainActivity$PlaceholderFragment" >  <TextView    android:id="@+id/tv"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="title" />    <TextView    android:id="@+id/url"    android:layout_below="@id/tv"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="url" />  <com.app.android05.ProgressWebView    android:id="@+id/web"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_below="@id/url" /></RelativeLayout>


3、MainActivity 调用

package com.app.android05;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {  private TextView title_tv ;   private TextView url_tv ;   private ProgressWebView webView ;  private String url = "http://dict.youdao.com/" ;   @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView( R.layout.activity_main ) ;    title_tv = (TextView) findViewById( R.id.tv ) ;    url_tv = (TextView) findViewById( R.id.url ) ;    webView = (ProgressWebView) findViewById( R.id.web ) ;        //设置webview的回掉函数,获得Url    webView.setOnWebCallBack( new OnWebCallBack() {      //获取标题      @Override      public void getTitle(String title) {        title_tv.setText( title ) ;      }      //获取当前web的URL地址      @Override      public void getUrl(String url) {        url_tv.setText( url );      }    });    webView.loadUrl( url );  }}