• 【Android】带进度条的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
     * 
     * 
    @author 农民伯伯
     * 
    @see http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html
     * 
     
    */
    public class WebActivity extends BaseActivity {

        private ProgressWebView webview;
        private String url;
        private String name;

        @Override
        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、自定义控件是在转载的,忘记出处,感谢~~ 

    结束

    没啥高深技术,实用就行! 

  • 相关阅读:
    创业公司新品如何寻求科技媒体的报道?
    DevStore分享:详析消费者十大心理学
    DevStore教你如何玩转饥饿营销?
    iClap分享:如何优雅的在 APP 中实现测试?
    java内部类
    Tostring 的用法
    Java 集合详解
    Java集合浅析
    异常--解析
    is-a 、have-a、和 like-a的区别
  • 原文地址:https://www.cnblogs.com/over140/p/2947721.html
Copyright © 2020-2023  润新知