이전시간에는 Android WebView를 통해 당근마켓 홈페이지를 표시하는 기능을 개발했습니다.
그러나 WebView 또다른 url로 이동하게 될 경우 WebView 내부가 아닌, 외부 브라우저를 통해 앱이 페이지가 표시되는 이슈가 있었습니다. 이를 해결해봅니다.
Android Developer 페이지의 WebView 문서에서 이 문제를 간단하게 해결할 수 있는 방법을 제시합니다.
사용자가 WebView에서 웹페이지의 링크를 클릭하면 URL을 처리하는 앱이 Android에서 실행되는 것이 기본 동작입니다. 대개 기본 웹브라우저에 도착 URL이 열리고 로드됩니다.
하지만 링크가 WebView내에서 열리도록 WebView의 이 동작을 재정의할 수 있습니다. 그러면 WebView에 의해 유지 관리되는 웹페이지 방문 기록을 통해 사용자가 앞뒤로 탐색할 수 있습니다.
webView 객체에 아래의 코드를 추가하여 사용자가 클릭한 링크가 WebView 내에서 로드되게 할 수 있습니다.
webView.webViewClient = WebViewClient() // 사용자가 클릭한 모든 링크가 WebView에 로드되게 함.
또한, 문서 바로아래에 뒤로가기 버튼을 클릭했을 때 WebView에서 이전 페이지를 표시하는 기능도 제공합니다.
MainActivity내에 아래의 코드를 추가해줍니다.
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
// Check if the key event was the Back button and if there's history
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack()
return true
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event)
}
이로서 간단하게 WebView 내에서 페이지를 이동하고, 뒤로가기 버튼 클릭시 WebView 내에서 뒤로가기로 동작하는 기능을 추가 했습니다.
reference :
https://developer.android.com/guide/webapps/webview?hl=ko#HandlingNavigation