반응형
WebView 안에서 iframe으로 유튜브 영상을 띄웠는데
전체화면 버튼을 눌러도 아무 반응이 없는 문제를 겪었다.
처음엔 아래처럼 흔히 생각할 수 있는 부분들을 다 의심했다.
- WebChromeClient 제대로 붙였나?
- iframe에 allowfullscreen 빠진 건가?
- WebView 설정 문제인가?
- Fragment 구조 때문인가?
근데 결론적으로는 전혀 다른 데 있었다.
문제 상황
- WebView에 유튜브 iframe 로드
- 전체화면 버튼 클릭
- 아무 반응 없음 (로그도 안 찍힘)
webView.webChromeClient = object : WebChromeClient() {
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
// 구현은 되어 있음
}
}
이렇게 구현해둔 상태였는데,
onShowCustomView() 자체가 아예 호출되지 않았다.
원인 + 해결 방법
결론부터 말하면 이거다.
👉 onShowCustomView만 구현하면 안 된다
반드시 아래 두 개를 같이 override 해야 한다.
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) { ... }
override fun onHideCustomView() { ... }
왜냐하면 WebView 내부에서는 fullscreen 처리를
하나의 흐름(진입/종료)으로 보고 있어서
- 진입: onShowCustomView
- 종료: onHideCustomView
이 두 개가 같이 구현되어 있어야 정상적으로 동작한다.
onHideCustomView()가 없으면
fullscreen을 지원하지 않는 상태로 판단해서
onShowCustomView() 자체를 호출하지 않는다.
결국 원인이 곧 해결 방법이었다.
적용 코드
webView.webChromeClient = object : WebChromeClient() {
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
// fullscreen view 처리
}
override fun onHideCustomView() {
// fullscreen 종료 처리
}
}
이렇게만 바꿔주면
전체화면 버튼이 바로 정상 동작한다.
추가로 겪었던 부분들
이거 해결하고 나면 보통 여기서 한 번 더 막힌다.
- 상태바가 그대로 남아있는 경우
- Fragment 안에서 전체화면이 꽉 차지 않는 경우
- 화면이 일부만 보이는 경우
이건 각각
- 시스템 UI 숨김 처리
- Activity의 decorView에 붙이기
- MATCH_PARENT로 view 추가
이런 식으로 추가 대응이 필요하다.
정리
WebView에서 fullscreen이 안 되는 경우
복잡한 설정 문제보다 단순한 케이스일 때가 많다.
👉 onShowCustomView + onHideCustomView 둘 다 구현했는지 먼저 확인하자
나도 이걸 몰라서 괜히 다른 데서 한참 헤맸다.
반응형
'안드로이드 > 팁' 카테고리의 다른 글
| [Android] Kapt에서 Ksp로 이전 (1) | 2025.05.21 |
|---|---|
| [Android] DUNS 번호 인증 관련 문제 대응기 (2) | 2024.12.24 |
| [Android] Recyclerview 클릭한 아이템 화면 중앙으로 이동 (0) | 2024.11.13 |
| [Android] PhotoPicker 로 이미지 업로드 (1) | 2024.10.01 |
| [Android] Kotlin DSL 적용기 (0) | 2024.01.31 |