웹뷰에 둥근모양의 prograssbar가 뜨는 예제다
public class Tab4 extends Activity {
WebView web;
Activity activity;
final static String TAG = "TAB4";
Dialog dialog;
ProgressBar progress;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.tabfour_bg);
web = (WebView) findViewById(R.id.tab4_webview);
web.getSettings().setJavaScriptEnabled(true);
web.setWebViewClient(new DraptWebViewClient());
web.setWebChromeClient(new DraptWebChormeClient());
web.loadUrl("http://m.naver.com/");
//스타일에 맞는 다일얼로그를 생성했다
dialog = new Dialog(this,R.style.prograssdialog);
dialog.addContentView(
new ProgressBar(this),
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
if (web.canGoBack())
//뒤로 돌아가기 버튼을 눌렀을때 더 뒤로 갈수있으면 웹뷰를 뒤로 돌리고
web.goBack();
else //그렇지 않으면 다이얼로그 띄워서 앱을 종료할까 물어본다
showDialog(0);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public Dialog onCreateDialog(int dialogId) {
Dialog dialog = null;
switch (dialogId) {
case 0:
//커스텀 다이얼로그다 뒤로 가다가 더 뒤로 가기 힘들때 보여주는것 내 블로그 찾아보면 custom dialog라고 있다
CustomDialog.Builder customBuilder = new CustomDialog.Builder(
Tab4.this);
customBuilder.setTitle("Custom title").setMessage("Custom body")
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
Tab4.this.dismissDialog(0);
}
}).setPositiveButton("Confirm",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
});
dialog = customBuilder.create();
break;
}
return dialog;
}
private class DraptWebChormeClient extends WebChromeClient {
/**
* 페이지를 로딩하는 현재 진행 상황을 전해줍니다. newProgress 현재 페이지 로딩 진행 상황, 0과 100 사이의
* 정수로 표현.(0% ~ 100%)
*/
@Override
public void onProgressChanged(WebView view, int newProgress) {
}
}
private class DraptWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
Log.i(TAG,"shouldOverrideUrlLoading");
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
Log.i(TAG,"onPageFinished");
dialog.dismiss();// 웹뷰 진행 상태를 닫는다
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
Log.i(TAG,"onPageStarted");
super.onPageStarted(view, url, favicon);
//웹뷰 진행 상태를 띄운다
if(dialog != null)
{
dialog.cancel();
dialog = null;
}
dialog = new Dialog(Tab4.this,R.style.prograssdialog);
dialog.addContentView(
new ProgressBar(Tab4.this),
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
dialog.show();
}
@Override
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
Log.i(TAG,"onLoadResource");
super.onLoadResource(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Toast.makeText(activity, "Oh no! " + description,
Toast.LENGTH_SHORT).show();
switch (errorCode) {
case ERROR_AUTHENTICATION:
break; // 서버에서 사용자 인증 실패
case ERROR_BAD_URL:
break; // 잘못된 URL
case ERROR_CONNECT:
break; // 서버로 연결 실패
case ERROR_FAILED_SSL_HANDSHAKE:
break; // SSL handshake 수행 실패
case ERROR_FILE:
break; // 일반 파일 오류
case ERROR_FILE_NOT_FOUND:
break; // 파일을 찾을 수 없습니다
case ERROR_HOST_LOOKUP:
break; // 서버 또는 프록시 호스트 이름 조회 실패
case ERROR_IO:
break; // 서버에서 읽거나 서버로 쓰기 실패
case ERROR_PROXY_AUTHENTICATION:
break; // 프록시에서 사용자 인증 실패
case ERROR_REDIRECT_LOOP:
break; // 너무 많은 리디렉션
case ERROR_TIMEOUT:
break; // 연결 시간 초과
case ERROR_TOO_MANY_REQUESTS:
break; // 페이지 로드중 너무 많은 요청 발생
case ERROR_UNKNOWN:
break; // 일반 오류
case ERROR_UNSUPPORTED_AUTH_SCHEME:
break; // 지원되지 않는 인증 체계
case ERROR_UNSUPPORTED_SCHEME:
break; // URI가 지원되지 않는 방식
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<WebView
android:id="@+id/tab4_webview"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</LinearLayout>
//이부분이 리소스 부분인데 스타일 정의하는것 보면 거의다가 투명으로 만들어버린다
//이것이 핵심이다
<style
name="prograssdialog">
<item
name="android:windowFrame">@null</item>
<item
name="android:windowBackground">@android:color/transparent</item>
<item
name="android:windowIsFloating">true</item>
<item
name="android:windowContentOverlay">@null</item>
<item
name="android:windowTitleStyle">@null</item>
<item
name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item
name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item
name="android:backgroundDimEnabled">false</item>
<item
name="android:background">@android:color/transparent</item>
</style>