Android의 WebView에서 링크를 클릭하면 URL을 처리하는 앱이 실행되는 것이 기본적인 동작이지만, 해당 링크가 WebView 내에서 열리도록 동작을 재정의할 수 있다.
이렇게 하면, WebView 내에서 웹페이지 방문 기록을 통해 사용자가 앞뒤로 페이지 탐색이 가능해진다.
Url 실행 처리
1. WebViewClient 연결
사용자가 클릭한 링크를 WebView에서 열려면, setWebViewClient()를 통해 WebView에게 WebViewClient를 제공해야 함
val myWebView: WebView = findViewById(R.id.webview)
myWebView.webViewClient = WebViewClient()
이렇게만 해주면 사용자가 클릭한 모든 링크가 WebView에서 로드 된다.
2. WebViewClient 커스텀
위의 예시를 적용하면 모든 링크를 WebView 내에서 로드하게 된다.
특정 url만 WebView에서 로드하고, 나머지는 기본 동작으로 처리되길 원한다면 WebViewClient를 커스텀하면 된다.
private class MyWebViewClient : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
// 앱에서 제공하는 url인 경우
if (Uri.parse(url).host == "www.example.com") {
// 내가 제공하는 url이므로 오버라이드 하지 않고, WebView에서 바로 로드하도록 함
return false
}
// 앱에서 제공하는 url이 아닌 경우 (다른 사이트에서 제공되는 url)
// 별도의 Activity에서 처리하도록 함 (기본 동작으로 url이 처리 되게 함)
Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
startActivity(this)
}
return true
}
}
위처럼 커스텀을 해준 후 WebView에 적용해준다.
val myWebView: WebView = findViewById(R.id.webview)
myWebView.webViewClient = MyWebViewClient()
페이지 방문 기록 탐색 처리
WebViewClient를 커스텀하여 URL 로드를 재정의하면 웹페이지의 방문 기록이 자동으로 쌓이게 됨
goBack(), goForward() 메소드를 통해 앞뒤로 이동할 수 있음
1. 뒤로가기 버튼으로 페이지 이동
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
// 눌린 버튼이 뒤로가기 버튼인지 & 히스토리가 있는지 (뒤로갈 수 있는지)
if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
myWebView.goBack()
return true
}
// 뒤로가기 키가 아니거나 히스토리가 없는 경우
return super.onKeyDown(keyCode, event)
}
'안드로이드 > 이론' 카테고리의 다른 글
[ 안드로이드 ] WebView 동영상 전체화면 처리 ( + 상단바 숨기기) (0) | 2023.07.12 |
---|---|
[ 안드로이드 ] ViewPager2 안에 WebView 중첩 Swipe 처리 (0) | 2023.07.12 |
[ 안드로이드 ] WebView 기본 사용법 (0) | 2023.07.06 |
[ 안드로이드 ] 클릭 가능한 모든 뷰에 반투명 효과 넣기 (0) | 2023.05.20 |
[ 안드로이드 ] Retrofit2를 이용하여 서버와 통신하기 (2) - 예시 (0) | 2023.05.04 |