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

WebView 로딩 메시지 표시

페이지 정보

작성자 MintState 댓글 0건 조회 11,331회 작성일 11-05-13 09:05

본문

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, 54 views)

댓글목록

등록된 댓글이 없습니다.

Total 18건 1 페이지
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™