반응형
UI구조상 스크롤뷰 안에 웹뷰를 넣어야하는 경우가 생길수 있습니다.
이런경우 종종 생기는 문제는 웹뷰쪽을 선택시 웹뷰 부분이 최상단으로 올라가고 그 다음부터 스크롤 되는문제
그리고 Webview가 줌인아웃이 되어야 하는데 되지 못하는 문제
2가지 문제에 직면을 하게 됩니다.
해결방법은 일단 다들 아시다시피 기본적으로 웹뷰의 줌인아웃 기능이 되도록 설정을 해줘야합니다.
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
settings.cacheMode = WebSettings.LOAD_NO_CACHE
settings.builtInZoomControls = true
settings.displayZoomControls = false
settings.loadWithOverviewMode = true
settings.useWideViewPort = true
1. 웹뷰 최상단으로 포커싱 되는 문제
android:focusable="false"
android:focusableInTouchMode="false"
위 처럼 웹뷰의 포커싱값을 false로 변경해주면 해결이 됩니다.
2. 줌인아웃 문제
일단은 먼저 보긴 해야할것이 위의 설정과 두번째 웹에서 줌인아웃이 되도록 메타데이터 값에 이상한걸 넣지 않았는지 확인
물론 메타데이터값이 정상적으로 되어있다 하여도 그냥은 되지는 않습니다.
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (MotionEventCompat.findPointerIndex(event, 0) == -1) {
return super.onTouchEvent(event)
}
event?.let {
if (it.pointerCount >= 2) {
requestDisallowInterceptTouchEvent(true)
} else {
requestDisallowInterceptTouchEvent(false)
}
}
return super.onTouchEvent(event)
}
웹뷰에서 위의 코드를 넣어서 처리해주면됩니다.
보통 스크롤뷰안에 UI들은 부모뷰가 이벤트를 뻇어갑니다.
그래서 두 손가락 이상일 경우에 부모에게 이벤트 전달을 하지 않고 직접 처리하면 웹뷰의 액션이 먼저 작동합니다.
반응형
'프로그램 > Android' 카테고리의 다른 글
1. 안드로이드 Compose 네이버 지도 설정 (0) | 2025.01.03 |
---|---|
컴포즈 커스텀 캘린더 만들기 (0) | 2024.11.25 |
NFC 비접촉결제 체크/앱 배터리사용량 최적화 해제 (0) | 2024.11.08 |
코루틴을 이용한 비동기 처리방법 (0) | 2024.11.06 |
구글스토어 다국어 스토어설정 (1) | 2024.10.07 |