본문 바로가기
Android 개발/Android

Android WebView 를 설정하고 로딩하는 방법을 정리해보자

by Developer88 2020. 3. 19.
반응형

때로는 안드로이드에서 web의 컨텐츠를 보여주어야 할 경우가 있습니다.

구글의 공식문서에는 가능하면 그냥 크롬같은 웹브라우저를 쓰라는 말도 적혀있지만,

경우에 따라서 유저들에게 해당 앱의 영역을 넘어가서,

관련 컨텐츠를 경험시키는 것이 부담스러울 때가 있기 때문이지요.

 

오늘은 webView를 구현하는 방법에 관해서 정리해 보도록 하겠습니다.

 

1. Manifest 선언

본격적으로 WebView에 대해 알아보기 전에

Manifest에 permission에 관해서 선언할 것 이 있습니다.

"android.permission.INTERNET"인데요.

WebView를 사용하기 전에, Manifest에 이 부분이 명시적으로 선언이 되어 있어야 합니다.

 

이제 준비가 되었으니, WebView를 사용해 보도록 하겠습니다.

 

2. XML에 webView 넣기

WebView또한 View클래스의 하위 클래스로서,

xml에 넣어서 사용하는 View와 크게 다르지 않습니다.

 

 

저는 아래와 같이, frameLayout에 webView를 넣어서 사용하였구요.

아래에 progressBar를 추가하였습니다.

 

 

 

3. webChromeClient객체와 WebViewClient객체 Set하기

위의 webView에 webChromeClient와 webViewClient를 set 해 주어야 하는데요.

먼저 chromeClient 객체를 아래와 같이 set해 줍니다.

onProgressChanged는 경우에 따라서 override할 필요가 있습니다.

 

 

다음으로, webView클라이언트를 set할 텐데요.

이 때 몇가지 overide해야 할 것이 있습니다.

shouldOverrideUrlLoadingonReceivedError인데요.

shouldOverrideUrlLoading는 만약 유저가 로딩한 컨텐츠에서 링크를 클릭할 경우에,

어떻게 할지를 override하는 것 인데요.

잠시 특정 웹사이트 페이지를 유저에게 보여주고, 클릭시에는 크롬같은 브라우저에서 웹서핑을 하도록 한다면,

아래와 같이 startActivity를 구현해 주어야 할 테구요.

 

onReceivedError는 error를 받은 경우 어떻게 할지를 정하는 것 입니다.

여기서는 에러가 발생했다고 하고, webView를 reset해 주었습니다.

 

이제 이 객체를 아래와 같이 webView에 set해주기만 하면 됩니다.

 

 

4. 몇 가지 옵션들

webview를 사용하는데 몇가지 옵션들을 추가해서 사용할 수 있는데요.

다음과 같은 옵션 값들은 자주 사용하게 되는 것 같습니다.

javaScriptEnabled의 경우는 브라우저에서 javascript를 사용하게 해주는 값 이구요.

javascript가 보안상의 문제를 일으킬 수 있으므로 주의해서 설정하라고 경고가 나옵니다.

 

domStorageEnabled는 로컬스토리지를 사용해서 dom을 제대로 가져올 수 있도록 하기 위한 옵션이며,

defaultTextEncodingName은 한글이 깨질 경우를 대비해서, UTF8로 읽어들일 수 있도록 해 주는 옵션입니다.

 

 

 

5. Loading

이제 set할 것을 모두 끝냈고,

프로젝트 상황에 맞게 옵션들도 설정을 하였다면,

url을 loadUrl함수에 넣어서 로딩해 주기만 하면 webView에 로딩된 것을 확인할 수 있습니다.

 

 

6. Known이슈

appcompat: 1.1.0을 사용하고 있다면, Lollipop버전에서 InflateException을 일으키는 것으로 알고 있는데요.

현재 최신버전인 androidx.appcompat:appcompat:1.2.0-alpha03에서는 해당 문제가 해결되었다고 합니다.

 

 

일단 1.1.0버전에서는 "android.os.Build.VERSION.SDK_INT"을 검사해서,

android.os.Build.VERSION_CODES.LOLLIPOP인 경우에는 유저의 브라우저를 띄우는 방법이나,

다른 방법들을 강구해 주어야 합니다.

아직 Lollipop버전을 버리기에는 해당 스마트폰 유저가 약간은 있는 편 이지요.

 

 

이렇게 해서 webView를 생성해서 set 하고 로딩하는 것까지 정리해 보았습니다.

좀 더 좋은 정보가 있다면 이 글을 통해서 업데이트 하도록 하겠습니다.

 

728x90

댓글