YesYo.com MintState Forums  
뒤로    YesYo.com MintState BBS > Tech > Android
검색
멤버이름  오토
비밀번호 
 

 
작성일 : 11-05-13 09:05
WebView 로딩 메시지 표시
 글쓴이 : MintState
조회 : 5,532  
WebView 로딩 메시지 표시

WebView에서 페이지를 완전히 부르기 전까지 로딩 메시지 표시하는 방법

private class WebViewClient1 extends WebViewClient { 
	@Override 
	public boolean shouldOverrideUrlLoading(WebView view, String url) { 
		if(url.startsWith("tel:")) {
			Intent call_phone = new Intent(Intent.ACTION_VIEW , Uri.parse(url)) ;
			// 현재의 activity 에 대해 startActivity 호출
			startActivity(call_phone);
			return true;
		}
		else
		{
			view.loadUrl(url); 
			return true;
		}
	} 

	/**
	 * 웹페이지 로딩이 시작할 때 처리
	 */
	@Override
	public void onPageStarted(WebView view, String url, Bitmap favicon) {
		if (mProgress == null) {
			mProgress = new ProgressDialog(activity);
			mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
			mProgress.setTitle("Loading...");
			mProgress.setMessage("Please wait for few second...");
			mProgress.setCancelable(false);
			mProgress.setButton("Close", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int whichButton) {
					mProgress.dismiss();
				}
			});
			mProgress.show();
		}
	}
		  
	/**
	* 웹페이지 로딩중 에러가 발생했을때 처리
	*/
	@Override
	public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
		Toast.makeText(activity, "Loading Error" + description, Toast.LENGTH_SHORT).show();
		if (mProgress.isShowing()) {
			mProgress.dismiss();
		}
	}
		  
	/**
	* 웹페이지 로딩이 끝났을 때 처리
	*/
	@Override
	public void onPageFinished(WebView view, String url) {
		if (mProgress.isShowing()) {
			mProgress.dismiss();
		}
	}
}



# 아래는 다른 자료 입니다.

Android의 WebView 구현시 화면에 ProgressDialog로 로딩화면 구현하기


WebView 는 안드로이드에서 브라우저의 역할을 하게 된다. 보여주고자 하는 웹페이지를 넣어서 실행만 하면 된다. 그런데 데스크탑 PC 가 아닌 관계로 네트웍 상황이 여의치 않아 끊겨 있을수도 있고 속도가 안나와서 로딩시간이 오래 걸릴수도 있다. 이럴때 웹페이지에 현재 로딩중이니 조금 기달려 달라는 메시지를 띄워주면 한결 완성도 높은 어플이 될 것이다.

이것을 구현하기 위해서는 상단 상태바에 값을 주고 진행하는 방법이 있고 Activity 에서 쓰는 ProgressDialog 를 화면시작과 함께 띄워주고 로딩이 끝났다면 종료하는 방법 두가지가 있다.

이번 아티클에서는 두번째 방법인 화면상에 로딩화면을 띄워주는 걸로 한다.
로딩화면을 제대로 표현하기 위해서는 WebView 의 이벤트 함수들을 알아야 한다.
이벤트 함수라 함은 WebView 에서 웹페이지를 로딩할 때 로딩시작, 로딩끝, 로딩중 에러 등등의 상태를 알수 있는 함수 들이다. 이 부분에 진행중 다이얼로그를 표현 하면된다.
그럼 이것을 처리하는 클래스는 무엇일까? 바로 WebViewClient 이다. 이 함수내부를 보게 되면 페이지 로딩 과정에서 처리되는 다양한 함수들이 있는 것을 알수 있다.

WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
	public void onProgressChanged(WebView view, int progress) {
		ctx.setProgress(progress * 1000);
	}
});
webView.setWebViewClient(new WebViewExtendSample);
webView.loadUrl("http://www.google.com");

private class WebViewExtendSample extends WebViewClient{
	@Override
	public boolean shouldOverrideUrlLoading(WebView view, String url) {
		// url 주소에 해당하는 웹페이지를 로딩
		view.loadUrl(url);
        return true;
	}
	
	@Override
	public void onLoadResource(WebView view, String url) {
		// 웹 페이지 리소스들을 로딩하면서 계속해서 호출된다.
		super.onLoadResource(view, url);
	}
	
	@Override
	public void onPageFinished(WebView view, String url) {
		// 페이지 로딩시 호출된다.
		super.onPageFinished(view, url);
	}
	
	@Override
	public void onPageStarted(WebView view, String url, Bitmap favicon) {
		// 페이지 요청이 시작될 경우 호출된다.
		super.onPageStarted(view, url, favicon);
	}
	
	@Override
	public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
		// TODO Auto-generated method stub
		super.doUpdateVisitedHistory(view, url, isReload);
	}

	@Override
	public void onFormResubmission(WebView view, Message dontResend, Message resend) {
		// TODO Auto-generated method stub
		super.onFormResubmission(view, dontResend, resend);
	}


	@Override
	public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
		// TODO Auto-generated method stub
		super.onReceivedHttpAuthRequest(view, handler, host, realm);
	}

	@Override
	public void onScaleChanged(WebView view, float oldScale, float newScale) {
		// TODO Auto-generated method stub
		super.onScaleChanged(view, oldScale, newScale);
	}

	@Override
	public void onTooManyRedirects(WebView view, Message cancelMsg, Message continueMsg) {
		// TODO Auto-generated method stub
		super.onTooManyRedirects(view, cancelMsg, continueMsg);
	}

	@Override
	public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
		// TODO Auto-generated method stub
		super.onUnhandledKeyEvent(view, event);
	}

	@Override
	public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
		// 키를 오버로딩한것인데 주로 웹페이지를 뒤,앞 등으로 이동하게 한다.
		// 왼쪽키를 누르게 되면 뒤로, 오른쪽 키는 앞으로 가게 한다.
		/*int keyCode = event.getKeyCode();
		if ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT) && webview.canGoBack()) {
			webview.goBack();
		return true;
		}else if ((keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && webview.canGoForward()) {
			webview.goForward();
		    return true;
		}
		return false;*/
		return super.shouldOverrideKeyEvent(view, event);
	}

	public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
		// 웹페이지 로딩중 에러가 발생했을때 처리 
	}
}

여기서 이용할 함수는 이름으로 쉽게 파악할수 있다. 페이지 시작시 onPageStarted, 페이지 로딩이 종료 되었을 때 onPageFinished, 로딩중 에러 났을 때 onReceivedError 이다.
이곳에 진행중 다이얼로그를 구현한다.
// 페이지 시작
public void onPageStarted(WebView view, String url, Bitmap favicon) {
	dialog = new ProgressDialog(activity);
	dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
	dialog.setTitle("Updating");
	dialog.setMessage(activity.getText(R.string.web_conn));
	dialog.setProgress(0);
	dialog.setMax(100);
	dialog.setButton("취소", new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			dialog.cancel();
		}
	});
	dialog.show();
	super.onPageStarted(view, url, favicon);
}
// 페이지 로딩시 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
	Toast.makeText(activity, activity.getText(R.string.web_error) + description, Toast.LENGTH_SHORT).show();
	if (dialog.isShowing()) {
		dialog.cancel();
	}
}
// 페이지 종료 
public void onPageFinished(WebView view, String url) {
	if (dialog.isShowing()) {
		dialog.cancel();
	}
}


출처 : http://mainia.tistory.com/595
첨부 파일
파일 종류: jpg webView_loading.jpg (15.4K, 3 views)
Rated 0/5 (0%) (0 Votes)

(\__/)
(='.'=)
(")_(")~
Search Infomation by MintState
MintState

 
 

Total 18
번호 제   목 글쓴이 날짜 조회
18 apktool을 이용하여 APK 파일 다루기 MintState 11-01 4890
17 BitmapDrawable과 Bitmap MintState 06-09 5224
16 Android Bitmap Object Resizing Tip MintState 06-09 4491
15 Android XML Parsing Tutorial - Using SAXParser MintState 06-07 4438
14 Android XML Parsing Tutorial – Using DOMParser MintState 06-07 4905
13 Splash(로딩) 화면 표시 MintState 05-31 5614
12 WebView 로딩중 에만 ProgressBar 진행상태 표시 MintState 05-16 6353
11 화면 회전 (Rotation) MintState 05-15 5802
10 WebView 로딩 메시지 표시 MintState 05-13 5533
9 WebView 사용시 Javascript Alert, Confirm 출력 MintState 05-11 5832
8 WebView 에서 tel: 인식 MintState 05-11 4575
7 구글 맵 API Key 발급 MintState 04-27 4986
6 Android <-> WebView 간 호출하기 MintState 04-21 5590
5 여러 크기의 폰에 따른 레이아웃 설정 (1) MintState 04-20 4986
4 Http Post 방식으로 웹서버와 자료를 주고받는 예제 MintState 04-03 5311
3 HttpPost (POST 방식으로 파라메터 넘기기) MintState 03-31 5790
2 [PDF] Android UI Design Patterns MintState 03-31 4422
1 android 웹서비스 구현하기 참조 문서 MintState 03-31 6500
모바일 버전으로 보기
CopyRight ©2004 - 2018, YesYo.com MintState. ™