투케이2K

133. (TWOK/WORK) [업무 이슈] 안드로이드 SwipeRefreshLayout 새로 고침 레이아웃 사용 시 Webview 웹뷰 화면 스크롤 동작 충돌 이슈 본문

투케이2K 업무정리

133. (TWOK/WORK) [업무 이슈] 안드로이드 SwipeRefreshLayout 새로 고침 레이아웃 사용 시 Webview 웹뷰 화면 스크롤 동작 충돌 이슈

투케이2K 2025. 2. 2. 09:28

[제 목]

[업무 이슈] 안드로이드 SwipeRefreshLayout 새로 고침 레이아웃 사용 시 Webview 웹뷰 화면 스크롤 동작 충돌 이슈

 

[내 용]

------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 안드로이드 디스플레이 화면이 작은 기기에서 웹뷰 Web 화면이 스크롤 전환 시 Android SwipeRefreshLayout 새로 고침 영역과 충돌 되어 기능 오동작 발생 이슈

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. 안드로이드 디스플레이 화면이 작은 디바이스에서 Webview 로드 수행 실시


2. 웹뷰의 Web 화면이 화면 사이즈에 맞게 스크롤 화면으로 전환 되어 표시 되는 것 확인


3. 웹뷰 화면을 스크롤 내린 후 > 다시 스크롤 올릴 시 SwipeRefreshLayout 과 충돌 되어 화면 스크롤이 되지 않고 웹 화면이 갱신 되는 이슈 확인  

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. SwipeRefreshLayout 과 웹뷰의 스크롤이 충돌 되지 않게 웹뷰 스크롤 이벤트 상속 받은 이후 웹 화면 Scroll Top 값이 0 인 경우만 SwipeRefreshLayout 가 동작 되도록 코드 수정


2. 예시 소스 코드 : 

// [WebView 객체 생성 수행]
WebView main_webview = (WebView) findViewById(R.id.main_webview);
refreshLayout.setEnabled(true); // [초기 새로 고침 활성 지정]


// [Web 화면 내 스크롤 이벤트 감지를 위한 이벤트 리스너 등록]
main_webview.setOnScrollChangeListener(new View.OnScrollChangeListener(){ // TODO [웹뷰 스크롤 이벤트 발생 확인]
    @Override
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
        S_Log.w("WEB_SCROLL", ">>>>>>>>>>>>>>>>> [scrollY] :: " + String.valueOf(scrollY) + " / [scrollX] :: " + String.valueOf(scrollX) + " >>>>>>>>>>>>>>>>>");

        if (scrollY == 0){ // TODO [최상단 인 경우]
            refreshLayout.setEnabled(true); // [새로 고침 활성 처리]
        }
        else { // TODO [스크롤 화면이 내려간 경우]
            refreshLayout.setEnabled(false); // [새로 고침 비활성 처리]
        }
    }
});

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------

[안드로이드 웹뷰 SwipeRefreshLayout 및 ProgressBar 사용해 웹뷰 갱신 및 커스텀 로딩 프로그레스 생성]

https://kkh0977.tistory.com/7629

------------------------------------------------------------------------------
 
반응형
Comments