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 |

