NestedScrollView使用和理解

2021-10-22 22:46:32 字數 2560 閱讀 9420

nestedscrollview支援巢狀滑動的 scrollview

因此,我們可以簡單的把nestedscrollview模擬為 scrollview,其作用就是作為控制項父布局,從而具備(巢狀)滑動功能。

nestedscrollview與 scrollview 的區別就在於nestedscrollview支援 巢狀滑動,無論是作為父控制項還是子控制項,巢狀滑動都支援,且預設開啟。

因此,在一些需要支援巢狀滑動的情景中,比如乙個 scrollview 內部包裹乙個recyclerview,那麼就會產生滑動衝突,這個問題就需要你自己去解決。而如果使用nestedscrollview包裹recyclerview,巢狀滑動天然支援,你無需做什麼就可以實現前面想要實現的功能了。

舉個例子:

我們通常為recyclerview增加乙個 header 和 footer 的方法是通過定義不同的 viewtype來區分的,而如果使用nestedscrollview,我們完全可以把recyclerview當成乙個單獨的控制項,然後在其上面增加乙個控制項作為 header,在其下面增加乙個控制項作為 footer。

具體布局如下所示:

<?xml version="1.0" encoding="utf-8"?>

注:nestedscrollview與 scrollview 一樣,內部只能容納乙個子控制項。

效果如下所示:

ps:雖然nestedscrollview內嵌recyclerview和其他控制項可以實現 header 和 footer,但還是不推薦上面這種做法(建議還是直接使用recyclerview自己新增 header 和 footer),因為雖然nestedscrollview支援巢狀滑動,但是在實際應用中,巢狀滑動可能會帶來其他的一些奇奇怪怪的***,google 也推薦我們能不使用巢狀滑動就盡量不要使用。

如果想知道nestedscrollview巢狀其他控制項可能帶來的問題,可以檢視:nestedscrollview、recycleview、viewpager 等布局方面的常見問題彙總,及解決

我們知道,android 的事件分發機制中,只要有乙個控制項消費了事件,其他控制項就沒辦法再接收到這個事件了。因此,當有巢狀滑動場景時,我們都需要自己手動解決事件衝突。而在 android 5.0 lollipop 之後,google 官方通過巢狀滑動機制解決了傳統 android 事件分發無法共享事件這個問題。

巢狀滑動機制的基本原理可以認為是事件共享,即當子控制項接收到滑動事件,準備要滑動時,會先通知父控制項(startnestedscroll);然後在滑動之前,會先詢問父控制項是否要滑動(dispatchnestedprescroll);如果父控制項響應該事件進行了滑動,那麼就會通知子控制項它具體消耗了多少滑動距離;然後交由子控制項處理剩餘的滑動距離;最後子控制項滑動結束後,如果滑動距離還有剩餘,就會再問一下父控制項是否需要在繼續滑動剩下的距離(dispatchnestedscroll)...

上面其實就是巢狀滑動機制的工作原理,那麼如果想讓我們自定義的view或者viewgroup實現巢狀滑動功能,應該怎樣做呢?

其實,在 android 5.0 之後,系統自帶的viewviewgroup都增加了巢狀滑動機制相關的方法了(但是預設不會被呼叫,因此預設不具備巢狀滑動功能),所以如果在 android 5.0 及之後的平台上,自定義view只要覆寫相應的巢狀滑動機制相關方法即可;但是為了提供低版本相容性,google 官方還提供了兩個介面,分別作為巢狀滑動機制父控制項介面和子控制項介面:

前面我們說過nestedscrollview無論是作為父控制項還是子控制項都支援巢狀滑動,就是因為它同時實現了nestedscrollingparentnestedscrollingchild。文件如下所示:

檢視詳細分析:

關於初步使用printf和scanf的理解和感想

關於初步使用printf和scanf的理解和感想 1.printf的使用格式 2.scanf的使用格式 3.使用 錯的地方 4.容易些錯的點 1.printf的使用格式 int a 1 printf this is my first web printf d n a 第乙個printf是直接輸出引號...

cookie和session的個人簡單理解

瀏覽器 客戶端發起請求 伺服器響應 setcookie要求瀏覽器 客戶端生成乙個cookie 瀏覽器 客戶端儲存cookie,並在下次請求中在請求頭中傳送這個cookie 伺服器識別這個瀏覽器發來的cookie,證明是同一使用者 這個使用者請求相同的伺服器都會傳送這一cookie重複3 5步,伺服器...

python中 args和 kwargs的理解

args 用來將引數打包成tuple給函式體呼叫 kwargs 打包關鍵字引數成dict給函式體呼叫 注意點 引數arg args kwargs三個引數的位置必須是一定的。必須是 arg,args,kwargs 這個順序,否則程式會報錯。args的用法 當傳入的引數個數未知,且不需要知道引數名稱時。...