Adnroid 는 일반적인 진행 바 가 있 는 WebView 를 만 듭 니 다.
일반적인 방법 은 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();
}
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.