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

简介: 1、自定义ProgressWebView package com.app.android05; import android.content.Context; import android.
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 );
    }
}

 


 

 

相关文章
|
11月前
|
前端开发 JavaScript Java
Web.xml - Servlet与Filter的url-pattern
Web.xml - Servlet与Filter的url-pattern
99 8
|
3月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
20天前
|
前端开发 开发者
WEB自定义页面请求响应
Web组件支持在应用拦截到页面请求后自定义响应请求能力。开发者通过onInterceptRequest()接口来实现自定义资源请求响应 。自定义请求能力可以用于开发者自定义Web页面响应、自定义文件资源响应等场景。
22 0
|
2月前
|
安全 PHP 开发者
Web安全-URL跳转与钓鱼
Web安全-URL跳转与钓鱼
52 8
|
3月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
4月前
|
算法
「AIGC」readLink实现url识别pdf、网页标题和内容
AIGC算法实现服务,通过Express接收URL,识别内容类型:HTML使用Cheerio解析,PDF用`pdf-parse`。自定义函数提取标题和内容。示例代码展示了如何处理HTTP响应,提取HTML的`&lt;title&gt;`及PDF文本,并提供错误处理。服务器运行在端口3000。
46 0
|
6月前
|
监控 数据库
第六十七章 使用 Web 服务监控 IRIS - 监控 Web 服务的 URL
第六十七章 使用 Web 服务监控 IRIS - 监控 Web 服务的 URL
49 0
|
6月前
|
JavaScript 前端开发 架构师
Web Components:自定义元素与Shadow DOM的实践
Web Components是用于创建可重用自定义HTML元素的技术集合,包括Custom Elements、Shadow DOM、HTML Templates和Slots。通过Custom Elements定义新元素,利用Shadow DOM封装私有样式,&lt;slot&gt;元素允许插入内容。自定义元素支持事件处理和属性观察,可复用且样式隔离。它们遵循Web标准,兼容各前端框架,注重性能优化,如懒加载和Shadow DOM优化。
65 0
|
6月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
1408 1
|
6月前
|
Android开发
webview 的 title 和 url
webview 的 title 和 url
76 0