国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 實現帶進度條的WebView的實例

2019-10-22 18:31:30
字體:
來源:轉載
供稿:網友

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);    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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泾阳县| 枣庄市| 丹寨县| 德惠市| 磐石市| 铜山县| 沙河市| 和平县| 尼勒克县| 菏泽市| 桃园市| 永善县| 中卫市| 云和县| 克东县| 铜鼓县| 固安县| 哈密市| 枞阳县| 甘孜县| 沙雅县| 北川| 望江县| 松阳县| 浦江县| 六盘水市| 陇南市| 兴化市| 永德县| 革吉县| 紫云| 扎鲁特旗| 寿宁县| 焦作市| 临颍县| 南城县| 长顺县| 德清县| 汾阳市| 鸡西市| 遵义县|