您现在的位置是:首页 > 文章详情

自定义带进度条的WebView , 增加获取web标题和url 回掉

日期:2017-05-15点击:400
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、xml 引用

<RelativeLayout 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" 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 ); } }

 


 

 

原文链接:https://yq.aliyun.com/articles/304049
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章