웹뷰에서 제일 끝까지 내렸을때 콜백이 필요해서 찾아보았다.
해결방법은 다양하지만 나는 커스텀뷰를 만드는 방법으로 해결했다.
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
}
} )
...
맨 하단에 있었을 때는 버튼이 활성화되고 조금만 올라가도 비활성화되는 것을 확인할 수 있다.