TabViewPager很好用

大飛機發表於2017-10-20

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,萬一以後用的到呢,✧(≖ ◡ ≖✿)嘿嘿,謝謝啦,好了,不說了,我要打遊戲去了~~~

Star地址:GitHub

相關文章