天天看點

帶進度條的webview

     如果不使用系統自帶的titlebar(即activity被設定@android:style/theme.notitlebar),那就需要自己來寫進度條了,這裡封裝了一個自定義控件和加載網頁的公共activity,友善使用。

聲明

  歡迎轉載,但請保留文章原始出處:)

    部落格園:http://www.cnblogs.com

    農民伯伯: http://over140.cnblogs.com   

正文

一、截圖

二、自定義控件

複制代碼

/**

 * 帶進度條的webview

 * @author 農民伯伯

 * @see http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html

 *

 */

@suppresswarnings("deprecation")

public class progresswebview extends webview {

    private progressbar progressbar;

    public progresswebview(context context, attributeset attrs) {

        super(context, attrs);

        progressbar = new progressbar(context, null, android.r.attr.progressbarstylehorizontal);

        progressbar.setlayoutparams(new layoutparams(layoutparams.fill_parent, 3, 0, 0));

        addview(progressbar);

        //        setwebviewclient(new webviewclient(){});

        setwebchromeclient(new webchromeclient());

    }

    public class webchromeclient extends android.webkit.webchromeclient {

        @override

        public void onprogresschanged(webview view, int newprogress) {

            if (newprogress == 100) {

                progressbar.setvisibility(gone);

            } else {

                if (progressbar.getvisibility() == gone)

                    progressbar.setvisibility(visible);

                progressbar.setprogress(newprogress);

            }

            super.onprogresschanged(view, newprogress);

        }

    @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);

}

三、加載網頁的公共activity

 * 加載網頁的activity

public class webactivity extends baseactivity {

    private progresswebview webview;

    private string url;

    private string name;

    protected void oncreate(bundle savedinstancestate) {

        super.oncreate(savedinstancestate);

        setcontentview(r.layout.commom_web);

        // ~~~ 擷取參數

        url = getintent().getstringextra("url");

        name = getintent().getstringextra("name");

        // ~~~ 綁定控件

        webview = (progresswebview) findviewbyid(r.id.webview);

        // ~~~ 設定資料

        titletext.settext(name);

        webview.getsettings().setjavascriptenabled(true);

        webview.setdownloadlistener(new downloadlistener() {

            @override

            public void ondownloadstart(string url, string useragent, string contentdisposition, string mimetype, long contentlength) {

                if (url != null && url.startswith("http://"))

                    startactivity(new intent(intent.action_view, uri.parse(url)));

        });

        webview.loadurl(url);

commom_web.xml

<?xml version="1.0" encoding="utf-8"?>

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <include layout="@layout/include_title" />

    <com.nmbb.ui.widget.progresswebview

        android:id="@+id/webview"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" />

</linearlayout>

四、補充說明

1、還可以再優化一下,在标題欄加一個重新整理按鈕。

2、如果加載的頁面有需要下載下傳檔案,需要設定setdownloadlistener方法,根據項目實際需求定制。

3、自定義控件是在轉載的,忘記出處,感謝~~

繼續閱讀