解決BottomSheetDialog+Listview出現(xiàn)的滑動沖突問題

BottomSheetDialog是一種可以從屏幕底端出現(xiàn),上下滑動即可關(guān)閉或展開的對話框布局,因?yàn)槠鋽U(kuò)展性、易用性強(qiáng),占用布局面積小等優(yōu)勢深受開發(fā)者的喜愛,具體可以參見我之前的文章:《BottomSheetDialog沉浸式的一些坑》( http://www.itdecent.cn/p/08755838c00f )有相關(guān)介紹。

正常情況下在BottomSheetDialog中嵌套滑動布局的不會出現(xiàn)任何問題的,但當(dāng)你嵌套Listview時(shí)就可能出現(xiàn)如下的滑動沖突問題了:

問題復(fù)現(xiàn)

1.前提:當(dāng)BottomSheetDialog完全展開(全屏)的情況下;
2.列表內(nèi)容高度撐起整體布局高度,并大于屏幕高度的情況下;
3.向上滑動列表到列表底部;
4.向下滑動,發(fā)現(xiàn)列表沒動,BottomSheetDialog卻被滑動了,導(dǎo)致此時(shí)容易誤操作關(guān)閉BottomSheetDialog。

解決方案:

1.在列表滑動事件截獲Touch觸摸事件;
2.判斷列表處于頂端時(shí)才取消截獲Touch觸摸事件
完美解決!

代碼中isListAtTopFlag 為列表是否處于頂端的Flag,名為listTask的列表處于頂端時(shí)釋放Touch觸摸事件的方法,讓BottomSheetDialog獲取觸摸事件即可。
相關(guān)代碼如下:

        listTask.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (!listTask.canScrollVertically(-1)) {      //canScrollVertically(-1)的值表示是否能向下滾動,false表示已經(jīng)滾動到頂部
                    listTask.requestDisallowInterceptTouchEvent(false);
                }else{
                    listTask.requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }
        });

以上。
如果本文對您有所幫助麻煩點(diǎn)個(gè)贊,如有疑問歡迎在評論區(qū)留言交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容