안드로이드에 내장된 브라우저는 구조가 굉장히 복잡하기 때문에 android.webkit이라는 독립적인 패키지에 담겨있다. 그리고 WebView라는 위젯을 사용해 간단하게 화면에 HTML을 표시하는 정도로 활용할 수 있고, 아니면 들어 있는 기능을 총동원해 강력한 브라우징 기능을 구현할 수도 있다.
1. 단순한 브라우저
간단한 기능만 사용한다면 WebView 역시 안드로이드의 다른 위젯과 별반 다를게 없다. 그저 레이아웃에 추가하고, 자바 코드에서 URL만 지정해주면 해당하는 URL의 내용을 바로 표시해준다.
layout/main.xml의 예제
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<WebView android:id="@+id/webkit"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
자바코드 예제
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;public class BrowserDemo1 extends Activity {
WebView browser;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
browser=(WebView)findViewById(R.id.webkit);
browser.loadUrl("http://commonsware.com");
}
}
인터넷을 사용할 수 있는 권한을 확보하도록 AndroidMainifest.xml 파일을 수정해야 한다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.webkit">
<uses-permission android:name="android.permission.INTERNET" />
<application>
<activity android:name=".BrowserDemo1" android:label="BrowserDemo1">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- WebView 위젯에서는 자바스크립트가 기본적으로 꺼져 있다. 자바스크립트를 동작하도록 활성화하려면 WebView 인스턴스의 getSettings().setJavaScriptEnabled(true) 메소드를 호출하면 된다.
2. 원하는 내용 표시
WebView 안에 원하는 내용을 표시하는 방법 두가지
- loadUrl() 메소드를 사용해 WebView에 URL을 넘겨주고 해당하는 페이지의 내용을 가져와 표시하도록 하는 방법
- loadData() 메소드에는 표현하려는 HTML을 직접 전달한다.
WebView 위젯을 사용하기 좋은 경우
- 애플리케이션 패키지와 함께 설치된 메뉴얼을 화면에 표시하고자 할 때
- 다른 작업을 처리한 결과로 받아온 HTML 형태의 문자열을 표시할 때
ex) Atom 피트에서 뽑아낸 본문 내용을 화면에 표시할 때
- 안드로이드에 내장된 위젯 대신 HTML 만으로 애플리케이션 화면을 구성하려는 경우
loadData() 메소드 설명
- loadData() 메소드의 가장 간단한 형태는 본문내용, MIME 타입, 문자열 인코딩 등의 내용을 모두 문자열로 지정한다.(MIME 타입은 text/html이며, 인코딩은 UTF-8을 사용)
browser.loadData("<html><body>Hello, world!</body></html>",
"text/html", "UTF-8");
3. 브라우저 내비게이션
WebView에는 기본적으로 브라우저 내비게이션 툴바가 포함돼 있지 않다. 앞으로, 뒤로 등의 기능을 갖고 있는 내비게이션 툴바를 별로 사용할 일이 없거나 화면을 최대한 활용해야 하는 경우에는 툴바가 없는 편이 낫다. 반면 브라우저 내비게이션 기능을 사용자에게 제공하려면 내비게이션 기능과 관련된 인터페이스를 개바자가 직접 만들어야 하는 단점도 있다.
WebView 위젯에는 다음과 같은 다양한 브라우져 내비게이션 기능이 내장
- reload() 메소드 : 현재 표시하는 페이지 내용을 새로 고침
- goBack() 메소드 : 브라우저 URL 기록 가운데 바로 이전 주소로 되돌아간다.
- goForward() 메소드 : 브라우저 URL 기록 가운데 바로 다음 주소로 나아간다.
- goBackOrForward() 메소드 : 브라우저의 URL 기록을 앞뒤 원하는 방향으로 이동할 수 있다. 넘겨주는 값이 0보다 작으면 해당 숫자만큼 뒤로 돌아가고, 0보다 크면 해당 숫자만큼 앞으로 나아간다.
- canGoBackOrForward() 메소드 : 넘겨주는 숫자값만큼 브라우저 URL 기록을 따라 이동할 수 있는지 확인한다.
- clearCache() 메소드 : 브라우저가 임시로 갖고 있던 파일을 제거한다.
- clearHistory() 메소드는 브라우저 URL 기록을 제거한다.
4. WebViewClient
WebView 위젯을 사용해 애플리케이션 내부 데이터를 표현하려면, 사용자가 표시된 HTML 링크를 플릭하는 등의 상황에서 제어권을 넘겨받아야 할 필요가 있다.
- 특정 작업에 대한 제어권을 확보하려면 WebViewClient 인스턴스를 하나 생성해 WebView 위젯의 setWebViewClient() 메소드에 넘겨줘야 한다.
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.util.Date;public class BrowserDemo3 extends Activity {
WebView browser;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
browser=(WebView)findViewById(R.id.webkit);
browser.setWebViewClient(new Callback());
loadTime();
}
// 현재 시각을 간단한 HTML 형태로 생성해 WebView 위젯에 적용
void loadTime() {
String page="<html><body><a href=\"clock\">"
+new Date().toString()
+"</a></body></html>";
browser.loadDataWithBaseURL("x-data://base", page,
"text/html", "UTF-8", null);
}
private class Callback extends WebViewClient {
// 링크 클릭 이벤트 처리
public boolean shouldOverrideUrlLoading(WebView view, String url) {
loadTime();
return(true);
}
}
}
5. 설정과 옵션
데스트탑에서 사용하던 웹브라우저를 보면 각종 설정과 옵션이 가득하다. 수많은 설정이나 옵션과 툴바 컨트롤 사이에서 기본 글꼴을 지정한다거나 자바스크립트의 동작 상태를 지정하는 등 다양한 기능에 대해 설정값을 지정할 수 있다.
WebSetting 클래스의 설정 메소드
- setDefaultFontSize() 메소드 : setTextSize() 메소드를 사용해 기본 글꼴 크기를 지정할 수 있다.
- setJavaScriptEnabled() 메소드 : 자바스크립트를 켜거나 끌 수 있다.
- setUserAgent() 메소드 : 0값을 넘겨주면 WebView에서 대상 웹사이트에 스스로가 휴대폰용 브라우저라는 사실을 user-agent값을 통해 알려준다.
출처 : http://nopd.textcube.com/?indexTimestamp=1264487399&c=5
'안드로이드' 카테고리의 다른 글
디바이스의 고유 정보값 얻어오기 (0) | 2011.01.27 |
---|---|
타이틀 바 꾸미기 (0) | 2011.01.27 |
안드로이드 2.0 Service API 변화 (0) | 2011.01.27 |
Handler (0) | 2011.01.27 |
hardware keyboard의 존재 여부 및 상태 확인 (0) | 2011.01.27 |