반응형
출처 - http://www.androes.com/119
Android에서 HTML 컨텐츠를 쉽게 출력하기 위해서는 WebView를 사용하면 된다. 이를 이용하면 URL 또는 HTML 텍스트를 이용해 화면 상에 웹 페이지 내용을 뿌릴 수 있다.
이 중에 <a> 태그가 있을 경우, WebView는 link를 만들어 준다. 일반적인 웹 브라우저와 동일하다. 출력 시 이 부분을 터치하면 해당 URL로 이동한다.
WebView는 <a> 태그에 들어가는 URL의 타입을 다음과 같은 4가지를 지원한다.
원래 WebViewClient 클래스는 WebView의 다양한 화면 업데이트 정보를 어플리케이션이 수신하기 위해 사용한다. 따라서 이 클래스는 WebView의 동작 자체는 그대로 수행하도록 두고, 동작에 따른 어플리케이션의 동작을 처리한다. URL에 따라 새로운 Activity를 호출해야 하는데, 이렇게 하면 새로운 Activity 호출이 안되고 기존 WebView에서 호출하려다 보니 오류가 발생하는 경우도 있다.
이럴 때, WebViewClient.shouldOverrideUrlLoading 메소드를 override 할 수 있다. 이 메소드는 boolean을 리턴한다.
•true : URL 호출에 대한 처리를 어플리케이션이 한다.
•false : URL 호출에 대한 처리를 WebView 자체가 한다.
따라서 이 부분에서 false를 리턴하게 되면 새로운 Activity를 부르지 않고 WebView가 자체적으로 처리하게 된다. 지금 필요한건 새로운 Activity를 불러오는 것과, WebView가 지원하지 않는 URL 형식을 처리할 수 있도록 하는 것이기 때문에 true를 리턴해야 한다.
* AndroidManifest.xml 에 아래 항목 추가
* Main.java
@Override
public void onCreate(Bundle savedInstanceState) {
...
wv = (WebView) findViewById(R.id.webarea);
wv.getSettings().setJavaScriptEnabled(true);
wv.setFocusable(true);
wv.setWebViewClient(new DraptWebViewClient());
wv.loadUrl(url);
...
}
private class DraptWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("tel:")) {
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));
startActivity(i);
return true;
}
view.loadUrl(url);
return true;
}
}
Android에서 HTML 컨텐츠를 쉽게 출력하기 위해서는 WebView를 사용하면 된다. 이를 이용하면 URL 또는 HTML 텍스트를 이용해 화면 상에 웹 페이지 내용을 뿌릴 수 있다.
이 중에 <a> 태그가 있을 경우, WebView는 link를 만들어 준다. 일반적인 웹 브라우저와 동일하다. 출력 시 이 부분을 터치하면 해당 URL로 이동한다.
WebView는 <a> 태그에 들어가는 URL의 타입을 다음과 같은 4가지를 지원한다.
• http://, https:// : 웹 페이지를 이동한다.
• tel: : 전화 다이얼로 이동한다.
• geo: : 구글 맵으로 이동한다.
• mailto: : 이메일 클라이언트로 이동한다.
이 외에 다양한 URL을 처리하기 위해서는 중간에 가로채야 한다. 안드로이드는 이를 위해 WebViewClient 클래스를 제공한다.
• tel: : 전화 다이얼로 이동한다.
• geo: : 구글 맵으로 이동한다.
• mailto: : 이메일 클라이언트로 이동한다.
이 외에 다양한 URL을 처리하기 위해서는 중간에 가로채야 한다. 안드로이드는 이를 위해 WebViewClient 클래스를 제공한다.
원래 WebViewClient 클래스는 WebView의 다양한 화면 업데이트 정보를 어플리케이션이 수신하기 위해 사용한다. 따라서 이 클래스는 WebView의 동작 자체는 그대로 수행하도록 두고, 동작에 따른 어플리케이션의 동작을 처리한다. URL에 따라 새로운 Activity를 호출해야 하는데, 이렇게 하면 새로운 Activity 호출이 안되고 기존 WebView에서 호출하려다 보니 오류가 발생하는 경우도 있다.
이럴 때, WebViewClient.shouldOverrideUrlLoading 메소드를 override 할 수 있다. 이 메소드는 boolean을 리턴한다.
•true : URL 호출에 대한 처리를 어플리케이션이 한다.
•false : URL 호출에 대한 처리를 WebView 자체가 한다.
따라서 이 부분에서 false를 리턴하게 되면 새로운 Activity를 부르지 않고 WebView가 자체적으로 처리하게 된다. 지금 필요한건 새로운 Activity를 불러오는 것과, WebView가 지원하지 않는 URL 형식을 처리할 수 있도록 하는 것이기 때문에 true를 리턴해야 한다.
* AndroidManifest.xml 에 아래 항목 추가
<uses-permission android:name="android.permission.CALL_PHONE" />
* Main.java
@Override
public void onCreate(Bundle savedInstanceState) {
...
wv = (WebView) findViewById(R.id.webarea);
wv.getSettings().setJavaScriptEnabled(true);
wv.setFocusable(true);
wv.setWebViewClient(new DraptWebViewClient());
wv.loadUrl(url);
...
}
private class DraptWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("tel:")) {
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));
startActivity(i);
return true;
}
view.loadUrl(url);
return true;
}
}
반응형
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 WindowManger.LayoutParams 속성 (0) | 2011.06.21 |
---|---|
안드로이드 GPS 상태체크 (0) | 2011.06.17 |
[Android] Intent 활용 예시 (0) | 2011.06.16 |
[android] progress bar, circle 예제 (0) | 2011.05.31 |
[android]블루투스(bluetooth) 통신 (0) | 2011.05.30 |
댓글