차근차근/Android

안드로이드에서 웹뷰(WebView) 사용법

예쁜꽃이피었으면 2014. 11. 17. 15:21

http://blog.daum.net/dayhyub/69



4. 안드로이드에서 웹뷰(WebView) 사용법

(1) 웹뷰 : 웹 페이지를 보여주는 위젯

- 네트워크 입출력, 캐싱, 링크 클릭 처리, 확대, 축소, 히스토리 관리 등 웹브라우저가 제공하는 모든 기능을 자체적으로 제공

- 안드로이드 내장 웹킷(WebKit)라이브러리가 모든 것을 처리

- 웹킷은 오픈 소스이며 사파리, 크롬등에 채용되어 이미 성능 입증,신뢰성이 높음

(2) WebView구현순서

1) 매니페스트에  INTERNET 퍼미션 지정

: 모바일 장비에서 네트워크의 사용은 요금과 관련되므로 배포시 사용자의 허가나 동의가 필요하므로

 

<!—인터넷 연결을 한다는 것을 명시하는 선언문 -à

<uses-permission android:name="android.permission.INTERNET"/>

2) layout에서 WebView를 설정

<WebView

           android:id="@+id/webView1"

           android:layout_width="match_parent"

           android:layout_height="match_parent" />

3) WebView에서 loadUrl을 이용해 모바일웹을 로딩

WebView wv= (WebView) findViewById(R.id.webView1);

wv.loadUrl("http://m.sports.daum.net/sports/soccer/schedule/today/");

4) WebSettings클래스로 WebView상태를 설정

WebSettings set = wv.getSettings();

set.setJavaScriptEnabled(true); // javascript를 실행할 수 있도록 설정

set.setJavaScriptCanOpenWindowsAutomtically (true);   // javascript가 window.open()을 사용할 수 있도록 설정

set.setBuiltInZoomControls(true); // 안드로이드에서 제공하는 줌 아이콘을 사용할 수 있도록 설정

set.setPluginState(WebSettings.PluginState.ON_DEMAND); // 플러그인을 사용할 수 있도록 설정

set.setSupportMultipleWindows(true); // 여러개의 윈도우를 사용할 수 있도록 설정

set.setSupportZoom(true); // 확대,축소 기능을 사용할 수 있도록 설정

set.setBlockNetworkImage(false); // 네트워크의 이미지의 리소스를 로드하지않음

set.setLoadsImagesAutomatically(true); // 웹뷰가 앱에 등록되어 있는 이미지 리소스를 자동으로 로드하도록 설정

set.setUseWideViewPort(true); // wide viewport를 사용하도록 설정

set.setCacheMode(WebSettings.LOAD_NO_CACHE); // 웹뷰가 캐시를 사용하지 않도록 설정

// (참고사이트) http://developer.android.com/reference/android/webkit/WebSettings.html

5) 페이지 navigation처리

: WebView로 구현시에는 첫 화면 로딩시에는 액티비티 내로 브라우저 내용이 보이지만 그 이후 페이지 내에 링크를 통해 리로딩될 시에는 내장된 브라우저가 실행 되어 버립니다.

만약 현재 액티비티 안에서만 계속 리로딩하고 싶으면 아래에 언급될 WebViewClient를 사용하도록 합니다.

//(참고사이트) http://developer.android.com/reference/android/webkit/WebViewClient.html

wv.setWebViewClient(new TabWebViewClient());

 

           private class TabWebViewClient extends WebViewClient {

                     @Override

                    

                     public boolean shouldOverrideUrlLoading(WebView view, String url) {

                               

                                System.out.println("ImageAdapter.bPopUp:["+ImageAdapter.bPopUp+"],URL :[" + url+ "]");

                                if(ImageAdapter.bPopUp == true){

                    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

                    view.getContext().startActivity(i);

                    return true;                                      

                                }else{

                                          System.out.println("[else]bPopUp:["+ImageAdapter.bPopUp+"],URL :[" + url+ "]");

                                          view.loadUrl(url);

                                          return true;

                                }

                     }

 

                     public void onReceivedError(WebView view, int errorCode,

                                          String description, String failingUrl) {

                                Toast.makeText(act, "Some Error :" + description, Toast.LENGTH_SHORT)

                                                     .show();

                     }

           }         

이 소스에서는 shouldOverrideUrlLoading과 onReceivedError만 구현했으나 많은 메소드들이 있는 클래스임

대표적인 메소드에 대해서는

void     onLoadResource(WebView view, String url)

외부 리소스를 불러올 때 처리할 내용을 구현한다.

 

void     onPageFinished(WebView view, String url)

페이지 로딩이 완료 되었을 때 처리할 내용을 구현한다.

 

void     onPageStarted(WebView view, String url, Bitmap favicon)

페이지 로딩이 시작될 때 처리할 내용을 구현한다.

 

void     onReceivedError(WebView view, int errorCode, String description, String failingUrl)

오류가 발생했을 때 처리할 내용을 구현한다.

 

 

void     onScaleChanged(WebView view, float oldScale, float newScale)

스케일이 변경되었을 때 처리할 내용을 구현한다.

 

WebResourceResponse   shouldInterceptRequest(WebView view, String url)

리소스 요청이 있을 때 처리할 내용을 구현한다.

 

boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)

키 이벤트 발생시에 처리할 내용을 구현한다.

 

boolean shouldOverrideUrlLoading(WebView view, String url)

새로운 Url을 불러 오려고 할 때 처리할 내용을 구현한다.

 

전체 소스 : 해외축구소스

  TabHost_20130305.zip

반응형