# WebViewClient를 상속받은 클래스 정의
WebViewClient 클래스를 상속받아 구현합니다. 이 안에 shouldOverrideUrlLoading() 메소드를 구현하지 않으면 웹뷰 내 링크 터치할 때 연결 프로그램(기본 브라우저, 크롬 등) 설정창이 뜹니다.
import android.webkit.*;
class WebBrowserClient extends WebViewClient {
/*
* 웹뷰 내 링크 터치 시 새로운 창이 뜨지 않고
* 해당 웹뷰 안에서 새로운 페이지가 로딩되도록 함
*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
// 웹뷰 설정
webView = (WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setUseWideViewPort(true);
webSettings.setSupportZoom(true); // 줌 서포터 표시
webSettings.setBuiltInZoomControls(true); // 멀티터치 줌 지원
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebBrowserClient());
// 웹뷰에 웹 사이트 표시
String url = "http://www.musictrot.com";
webView.loadUrl(url);
}
}
# WebView 초기화 방지
화면 회전시 웹뷰가 초기화되지 않도록 합니다. 액티비티 클래스 안에 onConfigurationChanged() 메소드를 구현합니다.
/*
* 화면 회전시 화면이 초기화되버리는 문제 방지
* 매니페스트 액티비티 속성에
* android:configChanges="orientation|screenSize"
* 추가 필요
*/
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
// 핸들러 객체 설정 (onCreate() 메소드 안에 구현!!!)
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 0) {
mFlag = false;
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 백 키를 터치한 경우
if(keyCode == KeyEvent.KEYCODE_BACK){
// 이전 페이지를 볼 수 있다면 이전 페이지를 보여줌
if(webView.canGoBack()){
webView.goBack();
return false;
}
// 이전 페이지를 볼 수 없다면 백키를 한번 더 터치해서 종료
else {
if(!mFlag) {
Toast.makeText(this, "'뒤로' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
mFlag = true;
mHandler.sendEmptyMessageDelayed(0, 2000); // 2초 내로 터치시
return false;
} else {
finish();
}
}
}