투케이2K

136. (TWOK/LOGIC) [android] 안드로이드 웹뷰 스크롤 이벤트 발생 시 Top 최상단 위치 값 확인 및 웹 리로드 갱신 처리 로직 본문

투케이2K 로직정리

136. (TWOK/LOGIC) [android] 안드로이드 웹뷰 스크롤 이벤트 발생 시 Top 최상단 위치 값 확인 및 웹 리로드 갱신 처리 로직

투케이2K 2025. 3. 6. 20:09

[로직 정리]

정리 로직 : Mobile

상태 : [android] 안드로이드 웹뷰 스크롤 이벤트 발생 시 Top 최상단 위치 값 확인 및 웹 리로드 갱신 처리 로직

 

[설 명]

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

- 안드로이드에서 웹뷰 로드를 수행하기 위한 퍼미션 권한 설정 및 네트워크 연결 상태 확인 필요

- 퍼미션 권한 설정 코드 : 

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

1. 안드로이드 애플리케이션 실행 및 웹뷰 로드 화면 진입

    - 사전) 웹뷰 XML 생성 부분에는 SwipeRefreshLayout 리프래시 레이아웃 생성 필요


2. 웹뷰 로드 수행 전) 휴대폰 네트워크 상태 확인 및 인터넷 사용 가능 한 환경 여부 체크


3. [IF] 인터넷을 사용할 수 없는 상황 인 경우 :

    - 휴대폰 모바일 네트워크 환경 확인이 필요합니다. 팝업창 표시


4. [ELSE] 인터넷을 사용할 수 있는 경우 : 

    - 웹뷰 호출에 필요한 url , header 지정 후 웹뷰 로드 수행 실시

    - 웹뷰 스크롤 이벤트 감지를 위한 setOnScrollChangeListener 이벤트 리스너 등록 수행

    - 웹뷰 새로 고침 이벤트 리스너 setOnScrollChangeListener 에서는 웹뷰 리프래시 레이아웃과 웹 스크롤 동작이 충돌 되지 않게 top 위치 체크 후 갱신 처리 로직 작성

        : SwipeRefreshLayout 레이아웃과 웹 화면 스크롤이 충돌 되어 화면 스크롤이 되지 않고 웹 화면이 갱신 되는 이슈가 발생할 수 있으므로 top 위치 체크

        : 예시 소스 코드 

        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 [최상단 인 경우]
                    S_Log.w("WEB_SCROLL_TOP", ">>>>>>>>>>>>>>>>> [setOnScrollChangeListener] :: [scrollY] :: " + String.valueOf(scrollY) + " / [scrollX] :: " + String.valueOf(scrollX) + " >>>>>>>>>>>>>>>>>");

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


 5. 웹뷰 로드 수행 완료 후 웹뷰 화면 스크를 이동 수행 및 최상단 위치에서 스크롤 수행 시 웹 페이지 새로 고침 동작 상태 확인

// --------------------------------------------------------------------------------------






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

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

https://blog.naver.com/kkh0977/223744907964?trackingCode=blog_bloghome_searchlist


[코틀린 : 안드로이드 Webview 웹뷰 setOnScrollChangeListener 사용해 웹 화면 스크롤 이벤트 감지 수행]

https://blog.naver.com/kkh0977/223744909155?trackingCode=blog_bloghome_searchlist


[자바 : A_Main - 웹뷰 로드 화면 관련 클래스 정리]

https://blog.naver.com/kkh0977/222680670897?trackingCode=blog_bloghome_searchlist

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