Android 웹뷰 끝 하단 감지하기

James_·2022년 9월 29일
0

웹뷰에서 제일 끝까지 내렸을때 콜백이 필요해서 찾아보았다.
해결방법은 다양하지만 나는 커스텀뷰를 만드는 방법으로 해결했다.

class CustomWebView @JvmOverloads constructor(
    context: Context,attrs:AttributeSet?=null,defStyleAttr:Int = 0
):WebView(context,attrs, defStyleAttr) {
    private var bottomReached = false
    private var listener:CustomWebViewListener?=null
    private var paddingOffset = 200

    fun setScrollListener(mListener: CustomWebViewListener){
        try{
            listener = mListener
        }catch (e:ClassCastException){
            e.printStackTrace()
            throw ClassCastException()
        }
    }


    override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
        if(this.computeVerticalScrollRange() <= (this.computeVerticalScrollOffset() +
                    this.computeVerticalScrollExtent() + this.paddingOffset)) {
            if(!bottomReached) {
                bottomReached = true
                listener?.bottomEndReached(true)

            }
        } else {
            if(bottomReached) {
                bottomReached = false
                listener?.bottomEndReached(false)
            }
        }
        super.onScrollChanged(l, t, oldl, oldt)
    }
}

interface CustomWebViewListener{
    fun bottomEndReached(isEnd:Boolean)
}

액티비티나 프래그먼트에 리스너를 익명 객체로 선언해준다(implements해도 무관)
activity

...
binding.wv.setScrollListener(object:CustomWebViewListener{
            override fun bottomEndReached(isEnd: Boolean) {
                binding.btn.btn.isEnabled = isEnd
            }
        } )
...

맨 하단에 있었을 때는 버튼이 활성화되고 조금만 올라가도 비활성화되는 것을 확인할 수 있다.

profile
Android 개발자

0개의 댓글