
TabLayout 選用屬性
- tabMode- 
- fixed:TabLayout 只有螢幕範圍的大小,不能超出螢幕邊界
- scrollable:TabLayout 中當 Tab 超出螢幕邊界時,將提供滑動以顯示看不到的 Tab
 
- tabIndicatorColor:指標顏色,也就是 selected Tab 的底線顏色
- tabSelectedTextColor:selected Tab 的字體顏色
- tabTextColor:其他 Tab 的字體顏色
 
Example 範例
<LinearLayout
    ...> 
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@android:color/holo_blue_light"
        app:tabSelectedTextColor="@android:color/black"
        app:tabTextColor="@android:color/darker_gray"
        app:tabMode="scrollable"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
</LinearLayout>
- PagerAdapter 種類:
- PagerAdapter (少用)
- getCount()
- isViewFromObject(View view, Object o):來判斷顯示的是否是同一個視圖
- instantiateItem(ViewGroup container, int position):對顯示的資源進行初始化
- destroyItem(ViewGroup container, int position, Object object):PagerAdapter有一個緩存範圍,如果在滑動過程中超過了緩存範圍,就會調用這個方法,銷毀資源
 
- FragmentPagerAdapter:頁面不會被回收,適合用於靜態頁面中
- getCount()
- getPageTitle(int position):取得相對的tab 標題
- getItem(int position):每一個position對應到自己的Fragment page
 
- FragmentStatePagerAdapter:沒使用的頁面會被回收,較適合用於多頁面
- getCount()
- getItem(int position):很像 createItem,用來產生一個新的 Fragment
 
 
TabLayout 方法整理
- addTab(tabLayout.newTab().setText("")):設定 Tab 標題內容
- addOnTabSelectedListener(new TabLayout.OnTabSelectedListener...):監聽TabLayout的標籤選擇,當標籤選中時ViewPager切換- 
- 需實作3個方法:
- onTabSelected:通常只會用到這個方法
- onTabUnselected
- onTabReselected
 
 
- setupWithViewPager(viewPager):將 Tab 和 ViewPager 綁在一起
- setAdapter(pagerAdapter):如同上面提到的,ViewPager 需要一個自己的 PagerAdapter
- setCurrentItem():設定被選擇的 ViewPager 相對應的 Page
- addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener():監聽ViewPager的頁面切換,當頁面切換時TabLayout的標籤跟著切換
Example 範例
private String[] titles = getResources().getStringArray(R.array.example); 
private List<ExampleFragment> fragmentList = new ArrayList<>(); 
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
    
    
    for (String title : titles) {
        tabLayout.addTab(tabLayout.newTab().setText(title));
    }
    
    
    ExamplePagerAdapter pagerAdapter = new ExamplePagerAdapter(getSupportFragmentManager(), titles, fragmentList);
    viewPager.setAdapter(pagerAdapter);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
private class ExamplePagerAdapter extends FragmentPagerAdapter{
    private List<ExampleFragment> fragmentList;
    private String[] titles;
    ExamplePagerAdapter(FragmentManager fm, String[] titles, List<ExampleFragment> fragmentList) {
        super(fm);
        this.titles = titles;
        this.fragmentList = fragmentList;
    }
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }
    @Override
    public int getCount() {
        return fragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}
Reference 參考資料
- TabLayout 展示圖片:http://www.tellmehow.co/add-android-badges-tab-layout/
- Android Material Design TabLayout属性app:tabMode和app: tabGravity
 https://blog.csdn.net/zhangphil/article/details/48931483
- TabLayout 官方文件
 https://developer.android.com/reference/android/support/design/widget/TabLayout.html
- TabLayout-Design Library
 https://medium.com/@devwilly/tablayout-design-library-409497547f89
- 如何使用 ViewPager + TabLayout
 http://givemepass.blogspot.tw/2016/07/viewpagertablayout_9.html
- android之ViewPager介紹:http://www.itread01.com/articles/1475982946.html
 
 
沒有留言:
張貼留言