반응형
웹뷰를 이용한 앱 만들다가 배운 것들을 정리해본 포스트.
# Layout
그냥 <WebView> 태그 넣고 그 안에 속성 넣어주면 끝...
1 |
|
# 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); } |
# 기타
1
2
3
4 |
webView.clearCache( true ); // 캐시 지우기 webView.reload(); // 현재 웹뷰 새로고침 webView.stopLoading(); // 로딩 중단 webView.setDefaultZoom(WebSettings.ZoomDensity.FAR); // 페이지 크기 자동 조절? |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - XML로 메뉴 정의하기 (0) | 2015.08.01 |
---|---|
안드로이드 - 간단한 옵션 메뉴 만들어 보기 (0) | 2015.07.28 |
안드로이드 인터넷연결체크 ( 3g/lte/wifi ) 메서드 (1) | 2014.05.15 |
안드로이드 - 컨텐트프로바이더 exported (0) | 2014.01.19 |
안드로이드 - Activity가 아닌 곳에서 Intent 하기 (0) | 2014.01.14 |
안드로이드 - appwidget 이 랜덤하게 멈춰요 해결책 (0) | 2014.01.11 |
안드로이드 - app widget 버튼이 동작을 안해요 해결법 (0) | 2014.01.11 |
안드로이드 - 새로운 다른 앱이 설치될때 app widget 멈출 경우 해결법 (0) | 2014.01.11 |