全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 实现带进度条的WebView的实例

Android 实现带进度条的WebView的实例

1. WebView加载网页方法

//加载本地资源
loadUrl("file:///android_asset/example.html");
//加载网络资源
loadUrl("http://baidu.com");

2. 带进度的Drawable文件view_progress_webview

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:id="@android:id/progress">
    <clip>
      <shape>
        <solid android:color="#31CE15"/>
        <corners android:radius="2dp"/>
      </shape>
    </clip>
  </item>

</layer-list>

颜色值为进度颜色,根据需要更换

3. ProgressWebView类

/**
 * 带进度条的WebView
 * @Author GQ
 */
public class ProgressWebView extends WebView {

  private ProgressBar progressbar;
  private Context mContext;

  public ProgressWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.mContext = context;
    progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
    progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 5, 0, 0));

    Drawable drawable = context.getResources().getDrawable(R.drawable.view_progress_webview);
    progressbar.setProgressDrawable(drawable);
    addView(progressbar);

    //主要处理解析,渲染网页等浏览器做的事情
    setWebViewClient(new WebViewClient() {
      @Override
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        //加载失败时候,显示自定义的页面
        if (errorListener != null) {
          errorListener.onError();
        }
      }
    });
    //辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
    setWebChromeClient(new WebChromeClient());

    getSettings().setSupportZoom(true);//是否可以缩放
    getSettings().setBuiltInZoomControls(true);
    getSettings().setJavaScriptEnabled(true);//支持JS
    getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    getSettings().setUseWideViewPort(true);
    getSettings().setLoadWithOverviewMode(true);
    getSettings().setSaveFormData(true);
    getSettings().setDomStorageEnabled(true);

    //优先使用缓存
    getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    //禁用长按
    setOnLongClickListener(new OnLongClickListener() {
      @Override
      public boolean onLongClick(View view) {
        return true;
      }
    });

    //如果在浏览器下载,调用浏览器默认下载+通知栏
    setDownloadListener(new DownloadListener() {
      @Override
      public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        mContext.startActivity(intent);
      }
    });
  }


  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
    public void onReceivedTitle(WebView view, String title) {
      super.onReceivedTitle(view, title);
      if (titleListener != null)
        titleListener.getTitle(title);
    }

  }


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

  private TitleListener titleListener;

  public interface TitleListener {
    void getTitle(String title);
  }

  public void setOnTitleListener(TitleListener titleListener) {
    this.titleListener = titleListener;
  }

  private ErrorListener errorListener;

  public interface ErrorListener {
    void onError();
  }

  public void setOnErrorListener(ErrorListener errorListener) {
    this.errorListener = errorListener;
  }

}

4. 使用

/**
* 公共WebView
*/
public class BasicWebActivity extends Activity {

  protected ProgressWebView progressWebView;
  private TextView title;//标题栏
  private TextView tv_none;//加载失败显示文字

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.common_webview);

    title = (TextView) findViewById(R.id.title);
    tv_none = (TextView) findViewById(R.id.tv_none);
    progressWebView = (ProgressWebView) findViewById(R.id.progressWebView);

    String url = getIntent().getStringExtra("url");
    progressWebView.setOnTitleListener(new ProgressWebView.TitleListener() {
      @Override
      public void getTitle(String title) {
        title.setText(title);
      }
    });
    progressWebView.setOnErrorListener(new ProgressWebView.ErrorListener() {
      @Override
      public void onError() {
        tv_none.setText("url资源失效");
      }
    });
    //加载网页
    progressWebView.loadUrl(url);
  }

 //重写返回键
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      if (progressWebView.canGoBack()) {
        progressWebView.goBack();//返回上一层页面
        return true;
      } else {
        finish();//关闭页面
      }
    }
    return super.onKeyDown(keyCode, event);
  }
}

其中common_webview就包含一个title一个progressWebView就不贴代码了。

如有疑问,请留言或者到本站社区交流讨论,本站关于Android开发的文章还有很多,还希望大家搜索参阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # 实现带进度条的WebView  # WebView带进度条  # Android中WebView加载网页设置进度条  # Android自定义带进度条WebView仿微信加载过程  # android实现用户体验超棒的微信WebView进度条  # Android编程实现WebView添加进度条的方法  # Android 带进度条的WebView 示例代码  # Android Webview添加网页加载进度条实例详解  # Android WebView线性进度条实例详解  # Android中实现Webview顶部带进度条的方法  # Android WebView实现顶部进度条  # 加载  # 进度条  # 就不  # 如有  # 希望能  # 自定义  # 希望大家  # 重写  # 谢谢大家  # 还有很多  # 对话框  # 值为  # 上一层  # 标题栏  # mContext  # AttributeSet  # context  # attrs  # super  # setLayoutParams 


相关文章: 山东云建站价格为何差异显著?  如何快速搭建高效简练网站?  如何通过VPS建站无需域名直接访问?  全景视频制作网站有哪些,全景图怎么做成网页?  建站之星如何优化SEO以实现高效排名?  建站OpenVZ教程与优化策略:配置指南与性能提升  如何在阿里云ECS服务器部署织梦CMS网站?  小程序网站制作需要准备什么资料,如何制作小程序?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何做静态网页,sublimetext3.0制作静态网页?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何在自有机房高效搭建专业网站?  建站VPS能否同时实现高效与安全翻墙?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  内网网站制作软件,内网的网站如何发布到外网?  韩国服务器如何优化跨境访问实现高效连接?  网站制作免费,什么网站能看正片电影?  网站制作网站,深圳做网站哪家比较好?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  开封网站制作公司,网络用语开封是什么意思?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  建设网站制作价格,怎样建立自己的公司网站?  再谈Python中的字符串与字符编码(推荐)  北京网站制作的公司有哪些,北京白云观官方网站?  模具网站制作流程,如何找模具客户?  如何快速搭建高效WAP手机网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  太原网站制作公司有哪些,网约车营运证查询官网?  如何通过老薛主机一键快速建站?  如何确保FTP站点访问权限与数据传输安全?  香港服务器选型指南:免备案配置与高效建站方案解析  建站主机是什么?如何选择适合的建站主机?  如何选择网络建站服务器?高效建站必看指南  香港服务器租用费用高吗?如何避免常见误区?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何将凡科建站内容保存为本地文件?  SQL查询语句优化的实用方法总结  如何在Windows服务器上快速搭建网站?  如何用已有域名快速搭建网站?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  一键网站制作软件,义乌购一件代发流程?  如何高效利用亚马逊云主机搭建企业网站?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  高端建站如何打造兼具美学与转化的品牌官网?  网站制作新手教程,新手建设一个网站需要注意些什么?  深入理解Android中的xmlns:tools属性  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  宝塔面板如何快速创建新站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。