Adnroid 는 일반적인 진행 바 가 있 는 WebView 를 만 듭 니 다.

Android 개발 에 서 는 디 스 플레이 웹 페이지 를 자주 불 러 와 야 합 니 다.보통 한 페이지 가 열 린 후에 데이터 불 러 오 기 를 기다 리 는 과정 에서 시간 이 좀 걸 립 니 다.이 럴 때 는 돌아 가 는 진행 막대(ProgressBar)를 표시 해 야 합 니 다.그 다음 에 자체 정의 컨트롤 과 웹 페이지 를 불 러 오 는 공공 Activity 를 패키지 하여 사용 하기 편리 합 니 다.
일반적인 방법 은 layot.xml 에 ProgressBar 를 추가 하 는 것 입 니 다.그러나 우 리 는 이렇게 하지 않 습 니 다.주로 layot 내장 을 줄 이기 위해 서 입 니 다.
관례 에 따라 우 리 는 먼저 최종 효과 도 를 살 펴 보 자.

호출 할 때 간단 합 니 다.url(웹 페이지 를 불 러 오 는 url)과 title(제목 표시)만 전달 하면 됩 니 다.다음 과 같 습 니 다.

Intent intent = new Intent(MainActivity.this, MainWebViewActivity.class);
  intent.putExtra("url", "http://blog.csdn.net/qq_20785431");
  intent.putExtra("title", "    ");
  startActivity(intent);

1.다음은 재 작성 한 로드 바 가 있 는 웹 뷰 를 살 펴 보 자.

package com.per.loadingwebviewdome;

import android.content.Context;
import android.os.Environment;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

/**
 * @author: xiaolijuan
 * @description:      webview
 * @date: 2016-06-03
 * @time: 23:34
 */
public class LoadingWebView extends WebView {

 private ProgressBar mProgressBar;
 /**
  *       
  */
 private static final String cacheDirPath = Environment
   .getExternalStorageDirectory() + "/LoadingWebViewDome/webCache/";

 public LoadingWebView(Context context) {
  super(context, null);
 }

 public LoadingWebView(Context context, AttributeSet attrs) {
  super(context, attrs, 0);
 }

 public LoadingWebView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  initContext(context);
 }

 private void initContext(Context context) {
  requestFocus();
  setInitialScale(39);
  getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//    Javascript     
  getSettings().setJavaScriptEnabled(true);//  WebView  ,    Javascript  
  getSettings().setUseWideViewPort(true);//        webview   
  getSettings().setLoadWithOverviewMode(true);//         
  getSettings().setDomStorageEnabled(true);//       DOM Storage API
  getSettings().setDatabaseEnabled(true);//  database storage API  
  getSettings().setDatabasePath(cacheDirPath); //         
  getSettings().setAppCachePath(cacheDirPath);//  Application Caches    
  getSettings().setAppCacheEnabled(true);//  Application Caches  
 }

 /**
  *     url
  *
  * @param url
  */
 public void loadMessageUrl(String url) {
  super.loadUrl(url);
  setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) { //                         ,    WebView   
    loadUrl(url);//         
    return true;
   }
  });
 }

 /**
  *      
  */
 public void addProgressBar() {
  mProgressBar = new ProgressBar(getContext(), null,
    android.R.attr.progressBarStyleHorizontal);
  mProgressBar.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT, 5, 0, 0));
  mProgressBar.setProgressDrawable(getContext().getResources()
    .getDrawable(R.drawable.bg_pb_web_loading));
  addView(mProgressBar);//      LoadingWebView 

  setWebChromeClient(new WebChromeClient());//  setWebChromeClient  
 }

 public class WebChromeClient extends android.webkit.WebChromeClient {
  @Override
  public void onProgressChanged(WebView view, int newProgress) {
   if (newProgress == 100) {
    mProgressBar.setVisibility(GONE);
   } else {
    if (mProgressBar.getVisibility() == GONE)
     mProgressBar.setVisibility(VISIBLE);
    mProgressBar.setProgress(newProgress);
   }
   super.onProgressChanged(view, newProgress);
  }
 }

 /**
  *   webview
  */
 public void destroyWebView() {
  clearCache(true);
  clearHistory();
 }
}

우 리 는 세 가지 구조 방법 을 다시 썼 습 니 다.기본 레이아웃 파일 은 두 개의 매개 변수의 구조 방법 을 호출 했 기 때문에 모든 구조 가 우리 의 세 개의 매개 변수의 구 조 를 호출 하도록 하 는 것 을 기억 하 십시오.우 리 는 세 개의 매개 변수의 구조 에서 사용자 정의 View 의 속성 을 얻 었 습 니 다.
그리고 레이아웃 에서 사용자 정의 View 를 설명 합 니 다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

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

 <com.per.loadingwebviewdome.LoadingWebView
  android:id="@+id/wv_loading"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

</LinearLayout>

2.다음은 일반적인 진도 가 있 는 웹 뷰 입 니 다.

package com.per.loadingwebviewdome;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * @author: xiaolijuan
 * @description:         WebView
 * @date: 2016-06-03
 * @time: 23:32
 */
public class MainWebViewActivity extends Activity implements View.OnClickListener {

 private ImageView mIvBack;
 private TextView mTvTitle;
 private LoadingWebView mLoadingWebView;

 private String mTitle = "";
 private String mUrl = "";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_webview);
  initView();
  initData();
 }

 private void initView() {
  mIvBack = (ImageView) findViewById(R.id.iv_back);
  mLoadingWebView = (LoadingWebView) findViewById(R.id.wv_loading);
  mTvTitle = (TextView) findViewById(R.id.tv_title);

  mLoadingWebView.addProgressBar();
  mIvBack.setOnClickListener(this);
 }

 private void initData() {
  mTitle = getIntent().getStringExtra("title");
  mUrl = getIntent().getStringExtra("url");

  mLoadingWebView.loadMessageUrl(mUrl);
  mTvTitle.setText(mTitle);
 }

 @Override
 public void onDestroy() {
  super.onDestroy();
  mLoadingWebView.destroyWebView();
 }

 @Override
 public void onClick(View v) {
  switch (v.getId()) {
   case R.id.iv_back:
    if (mLoadingWebView.canGoBack())
     mLoadingWebView.goBack();
    else {
     finish();
    }
    break;
  }
 }

 /**
  *      ,          WebView     
  */
 @Override
 public void onBackPressed() {
  if (mLoadingWebView.canGoBack())
   mLoadingWebView.goBack();
  else {
   super.onBackPressed();
  }
 }
}


이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기