728x90
# Layout
그냥 <WebView> 태그 넣고 그 안에 속성 넣어주면 끝...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" tools:context = ".MainActivity" > < WebView android:id = "@+id/webView" android:layout_width = "match_parent" android:layout_height = "match_parent" /> </ LinearLayout > |
# WebViewClient를 상속받은 클래스 정의
WebViewClient 클래스를 상속받아 구현합니다. 이 안에 shouldOverrideUrlLoading() 메소드를 구현하지 않으면 웹뷰 내 링크 터치할 때 연결 프로그램(기본 브라우저, 크롬 등) 설정창이 뜹니다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
import android.webkit.*; class WebBrowserClient extends WebViewClient { /* * 웹뷰 내 링크 터치 시 새로운 창이 뜨지 않고 * 해당 웹뷰 안에서 새로운 페이지가 로딩되도록 함 */ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true ; } } |
# WebView 객체 생성 및 세팅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
import android.webkit.*; public class MainActivity extends Activity { private WebView webView; protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 웹뷰 설정 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()); // 웹뷰에 웹 사이트 표시 webView.loadUrl(url); } } |
# WebView 초기화 방지
화면 회전시 웹뷰가 초기화되지 않도록 합니다. 액티비티 클래스 안에 onConfigurationChanged() 메소드를 구현합니다.
1
2
3
4
5
6
7
8
9 |
/* * 화면 회전시 화면이 초기화되버리는 문제 방지 * 매니페스트 액티비티 속성에 * android:configChanges="orientation|screenSize" * 추가 필요 */ public void onConfigurationChanged(Configuration newConfig){ super .onConfigurationChanged(newConfig); } |
반드시 매니페스트 파일에 다음과 같이 액티비티 속성을 추가해야 합니다.
1
2
3
4
5 |
< activity android:name = "com.heroism.webviewapp.MainActivity" android:configChanges = "orientation|screenSize" android:label = "@string/app_name" > </ activity > |
# 뒤로가기
액티비티 클래스 안에 onKeyDown() 메소드를 구현하면 back 키를 눌렀을때 이전 페이지를 보여주도록 할 수 있습니다. 이때 canGoBack() 메소드로 이전 페이지로 이동할 수 있는지 판단한 후 goBack() 메소드를 호출하여 이전 페이지를 보여줍니다.
첫 페이지 상에서 back 키를 연속으로 두 번 터치하면 앱을 종료시키게 할 수 있습니다. 이 코드는 이곳(http://hyvaa.tistory.com/97) 을 참고했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 |
// 핸들러, 플래그 private Handler mHandler; private boolean mFlag = false ; // 핸들러 객체 설정 (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(); } } } return super .onKeyDown(keyCode, event); } |
728x90
'Android' 카테고리의 다른 글
eclipse 이클립스 안드로이드 설치 (0) | 2013.08.15 |
---|---|
안드로이드 웹뷰 다이얼로그 띄우기 [dialog] (0) | 2013.08.12 |
[webView] 뒤로가기 (BackKey) 처리 팁 (0) | 2013.08.05 |
[웹뷰] webView 멀티터치, 확대 축소, 줌, zoom (0) | 2013.08.05 |
안드로이드 임시 정리 (내가 모르는거) (0) | 2013.07.29 |