TabViewPager
Star地址:GitHub
專案中經常能用到這樣的使用場景:
在頂部顯示一個Header,接著是一個TabLayout,而每個Tab都對應一個RecyclerView,在向上滑動的時候,Header和TabLayout跟隨RecyclerView滑動,但是TabLayout不能移出頂部。
咕~~(╯﹏╰)b,聽起來很複雜,不知所云
對於這種效果,有兩種解決方案:
- Android提供的Design包實現
- 自己控制Header移動
方案一:Android提供的Design包
這種方案的效果如下:
對於這種效果,我們要怎麼實現呢?
佈局中大致是這樣的結構
<CoordinatorLayout >
<AppBarLayout>
<CollapsingToolbarLayout>
<Toolbar>
</Toolbar>
</CollapsingToolbarLayout>
</AppBarLayout>
<TabLayout>
</TabLayout>
<ViewPager>
</ViewPager>
</CoordinatorLayout>複製程式碼
可以看到,佈局很複雜,而且必須是Material Design風格,就國內這種環境,很多App應該Toolbar都是自己寫的吧,更別說Material Design了,就個人而言,我不太喜歡這種顯示方式,不夠乾脆利落。
方案二:自己控制Header移動
第二種方案是自己手動控制Header的移動,這樣雖然佈局邏輯簡單了,但是必須自己手動去調整Header的位置,增加了程式碼的複雜性,於是乎,我就簡單的封裝了一個小小小小的庫,讓你用最簡單的方式實現這種效果。
廢話不多說,有圖有真相:
怎麼樣,看起來是不是很簡潔,那接下來老夫就講講怎麼使用
首先,你需要在build.gradle中新增一條依賴:
compile 'com.goyourfly:tabviewpager:0.5'複製程式碼
接下來呢,在佈局中新增TabViewPager
<com.goyourfly.tabviewpager.TabViewPager
android:id="@+id/tabViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />複製程式碼
最後呢,在程式碼中進行一下簡單的配置
TabViewPager tabViewPager = findViewById(R.id.tabViewPager);
tabViewPager.setup(new String[]{"A", "B", "C"},//Tab陣列
View.inflate(this, R.layout.layout_header, null),// HeaderView
true,// Header是否Parallax
new Function2<RecyclerView, Integer, Unit>() {
@Override
public Unit invoke(RecyclerView recyclerView, Integer integer) {
// 為每個Tab下的RecyclerView繫結LayoutManager
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivityJava.this));
// 為每個Tab下的RecyclerView繫結Adapter
recyclerView.setAdapter(new MyAdapter());
return null;
}
});複製程式碼
然後,然後就沒有然後了?,怎麼樣,是不是感覺很簡單,如果覺得還闊以的話,麻煩給個Star,萬一以後用的到呢,✧(≖ ◡ ≖✿)嘿嘿,謝謝啦,好了,不說了,我要打遊戲去了~~~