안드로이드 웹뷰(WebView) 사용하기


웹뷰

 - 웹뷰는 앱 내에 웹화면을 띄우는 뷰를 말합니다.


웹뷰는 인터넷을 사용하기 때문에 웹뷰를 사용하기 위해선 인터넷 접속권한을 등록해야합니다.

manifests 파일에 들어가서 아래에 밑줄 쳐진 permission을 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examples.androidpractice8">

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


웹뷰를 사용할 레이아웃에 들어가서 웹뷰를 추가합니다.

 

 


티비티 파일에서 웹뷰를 선언 및 객체화를 시켜주고 여러가지 설정이 있는데 몇가지 예를 들면


.setJavaScriptEnabled - 웹뷰에서 자바 스크립트 사용

.setSupportZoom - 손으로 확대, 축소를 할 수 있도록 사용

.setBuiltInZoomControls - WebView 내장 Zoom 사용


등이 있습니다.



이 상태에서 loadUrl을 통해 페이지를 불려오려고 하면  외부 브라우저를 실행하게 됩니다.

웹뷰 내에서 웹 페이지를 돌아다니기 위해선 WebViewClient의 shouldOverrideUrlLoading 함수를 사용해야합니다.  


.onPageStarted() - 웹뷰에서 url이 로드 될때 호출 되는 함수

.onPageFinished() - 웹뷰에서 url 로딩이 완료되면 호출 되는 함수 


위에 2가지 메소드를 추가하면 url이 로드될 때, 완료 되었을 때 상황을 설정해 줄 수 있습니다.


아래 코드에서는 로드가 시작되면 ProgressDialog를 실행하고 완료되면 로드가 완료된 url을 editText에 설정해주는 예제입니다.

webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressDialog.setMessage("Loading");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
et.setText(url);

}
});

웹에서 띄우는 팝업 창을 웹뷰를 통해 보여주게 하려면 .setWebChromeClient()를 설정해야 합니다. 


.onProgressChanged() - 위의 코드에서 설정해준 ProgressDialog가 로딩이 완료되면 값이 100이상이 되는데 이 경우

ProgressDialog를 사라자기게 하기 위해 사용합니다.

.onJSAlert() -  웹에서 띄우는 팝업 창 같은 것을 웹뷰에서 보여주기 위해 사용합니다.

webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if(newProgress >= 100) progressDialog.dismiss();
}

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});


마지막으로 웹뷰에서 url을 로드할때 loadUrl을 사용합니다.

webView.loadUrl("http://www.naver.com");


+ Recent posts