Android:使用TabLayout詳解


 TabLayout的實現

 

安卓中實現以上選項卡的效果方式有很多種,TabHost,自定義控件(第三方庫),RadioGroup等等。這里主要介紹Android Design庫中的TabLayout的使用。TabLayout是安卓6.0之后出現的。

 

基本使用步驟:

一、

在Android Studio中可以直接引用design庫,第一步當然是先引入這個庫了,如下圖:

 

二、

在布局中加入TabLayout控件

<android.support.design.widget.TabLayout android:id="@+id/mytab" android:layout_width="match_parent" android:layout_height="wrap_content"
    ></android.support.design.widget.TabLayout>

 

 

三、

在java代碼中添加Tab實現選項卡效果

 

package com.contentprovide.liuliu.tablayout_demo; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { TabLayout mytab; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mytab = (TabLayout) findViewById(R.id.mytab); mytab.addTab(mytab.newTab().setText("選項卡一").setIcon(R.mipmap.ic_launcher)); mytab.addTab(mytab.newTab().setText("選項卡二").setIcon(R.mipmap.ic_launcher)); mytab.addTab(mytab.newTab().setText("選項卡三").setIcon(R.mipmap.ic_launcher)); mytab.addTab(mytab.newTab().setText("選項卡四").setIcon(R.mipmap.ic_launcher)); mytab.addTab(mytab.newTab().setText("選項卡五").setIcon(R.mipmap.ic_launcher)); mytab.addTab(mytab.newTab().setText("選項卡六").setIcon(R.mipmap.ic_launcher)); } }

 

 這三步完成已經初步實現選項卡效果了

 

 

 

 

接下來進一步的使用就是給選項卡加一些效果,讓它看起來更好看

 

 改變Tab顏色

設置字體默認顏色

 

app:tabTextColor="#ffffff"

 

 

 

 

設置字體被選中后的顏色

app:tabSelectedTextColor="#e40707"

 

 

 設置指示器顏色

app:tabIndicatorColor="#30e407"

 

 

 設置指示器高度(如果希望選項卡不顯示指示器效果只需要把指示器高度設置為0就行了)

 app:tabIndicatorHeight="2dp"

 

 

 設置Tab背景顏色(作用效果和Background一樣)

app:tabBackground="@color/colorye"

 

 

設置Tab滾動方式

可滾動

app:tabMode="scrollable"

 

固定

app:tabMode="fixed"

 

 

給Tab添加圖標,在Java代碼中實現

     mytab.addTab(mytab.newTab().setText("選項卡一").setIcon(R.mipmap.ic_launcher));
        mytab.addTab(mytab.newTab().setText("選項卡二").setIcon(R.mipmap.ic_launcher));
        mytab.addTab(mytab.newTab().setText("選項卡三").setIcon(R.mipmap.ic_launcher));
        mytab.addTab(mytab.newTab().setText("選項卡四").setIcon(R.mipmap.ic_launcher));
        mytab.addTab(mytab.newTab().setText("選項卡五").setIcon(R.mipmap.ic_launcher));
        mytab.addTab(mytab.newTab().setText("選項卡六").setIcon(R.mipmap.ic_launcher));

 

 

 

我設置完這些屬性后的效果是這樣的

 

 

TabLayout的監聽事件

選中了某個tab的監聽事件OnTabSelectedListener():

setOnTabSelectedListener()這個方法已經被拋棄了,現在一般使用addOnTabSelectedListener

 

       mytab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { // 添加選中Tab的邏輯
 } @Override public void onTabUnselected(TabLayout.Tab tab) { // 添加未選中Tab的邏輯
 } @Override public void onTabReselected(TabLayout.Tab tab) { // 再次選中tab的邏輯
 } });

 

 

 

 

最后實用性比較強的是將TabLayout和ViewPager關聯,這種使用方法比較靈活,在實際開發中一般都是這樣配合使用

關聯TabLayout和ViewPager只需要調用mytab.setupWithViewPager(mViewPager);

 

這里記錄一下通過使用Fragment作為ViewPager的內容,再將ViewPager關聯

步驟一、

在布局文件中TabLayout控件的下方添加ViewPager控件(如果需要選項卡位於底部實現類似QQ的那種效果,只需要把ViewPager控件放在TabLayout控件的上面就行了)

 <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/mViewPager"
        ></android.support.v4.view.ViewPager>

 

 

步驟二、

在Java代碼中定義兩個List集合,一個放TabLayout標題Title,一個放TabLayout內容Fragment

    List<String> mTitle; List<Fragment> mFragment;

 

給這兩個集合添加內容

      mTitle = new ArrayList<>(); mTitle.add("選項卡一"); mTitle.add("選項卡二"); mTitle.add("選項卡三"); mTitle.add("選項卡四"); mFragment = new ArrayList<>(); mFragment.add(new Fragment()); mFragment.add(new Fragment()); mFragment.add(new Fragment()); mFragment.add(new Fragment());

 

 

步驟三、

給ViewPager創建適配器,將Title和Fragment添加進ViewPager中

mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return mFragment.get(position); } @Override public int getCount() { return mFragment.size(); } @Override public CharSequence getPageTitle(int position) { return mTitle.get(position); } });

 

 

步驟四、

最后一步當然是將ViewPager和TabLayout關聯起來了

 

        mytab.setupWithViewPager(mViewPager);

 

 

 

 

 

全部代碼如下

public class MainActivity extends AppCompatActivity { TabLayout mytab; ViewPager mViewPager; List<String> mTitle; List<Fragment> mFragment; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mytab = (TabLayout) findViewById(R.id.mytab); mViewPager = (ViewPager) findViewById(R.id.mViewPager); mTitle = new ArrayList<>(); mTitle.add("選項卡一"); mTitle.add("選項卡二"); mTitle.add("選項卡三"); mTitle.add("選項卡四"); mFragment = new ArrayList<>(); mFragment.add(new Fragment()); mFragment.add(new Fragment()); mFragment.add(new Fragment()); mFragment.add(new Fragment()); mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return mFragment.get(position); } @Override public int getCount() { return mFragment.size(); } @Override public CharSequence getPageTitle(int position) { return mTitle.get(position); } }); mytab.setupWithViewPager(mViewPager); } }

 

 

最后補充一點:最好給ViewPager添加上預加載,這樣看起來的效果會好一點

 

 預加載界面個數,表示你的預告加載的頁面數量的個數,假設我設置為2,當前顯示一個,預先加載兩個個.這樣你在移動前就已經加載了下一個界面,移動時就可以看到已經加載的界面了.

 

mViewPager.setOffscreenPageLimit(2);

 

 

 

今天做一個項目要實現選項卡的選項不但有文字還要有圖片,並且選中的選項中的文字和圖片要進行變色。

文字的相關用法上面都寫了,但是ViewPager的適配器FragmentPagerAdapter沒有和設置圖片相關的方法,下面我就記錄一下當TabLayout和Fragment和Viewpager進行綁定之后怎么給選項卡添加圖片。

 

我們都知道使用完下面的方法之后TabLayout和ViewPager的綁定就已經完成了,選項卡的效果也已經實現了

tab.setupWithViewPager(mViewPager);

 

所以在我們需要給選項卡設置圖片就需要把選項卡的內容給清空,使用下面的方法

tab.removeAllTabs();

 

現在我們有幾個選項就做幾個圖片選擇器(選擇器的作用是當我們選中當前選項時,當前的圖片會進行變色),做圖片選擇器的方法這里就不寫了,我另外一篇博客里面有。

然后把這些圖片選擇器都放到一個集合當中去。

 

接下來就可以給選項卡設置文字和圖片了,這里的方法和一開始寫的是一樣的。下面的tab是我自定義的TabLayout對象

TabLayout.Tab tt;
        for (int i = 0; i < 3; i++) {
            tt = tab.newTab();
            tt.setText(Tab_title.get(i).toString());
            tt.setIcon(getResources().getDrawable((Integer) Tab_Icon.get(i)));
            tab.addTab(tt, i);
        }

 

 

下面是實現效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM