自定义 Tablayout - 简书

2,417 阅读1分钟
原文链接: www.jianshu.com

### 需求:4个页面,每个页面有“下一步”按钮,还有一个选项卡(Tablayout形式),满足指定条件condition可点击按钮和选项卡(tab)。

一开始直接用的Tablayout+ViewPager+Fragment,发现tablayout的指示器颜色很难去控制,tab点击可以控制,但指示器颜色还是会碰到Tab就换到指定颜色,最终决定用老方法,自己做个线性布局嵌套。


android:id="@+id/lin1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/tab_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第一步" />

android:id="@+id/tab_indic"

android:layout_width="wrap_content"

android:layout_height="2dp"

android:layout_marginTop="8dp"

android:visibility="visible" />


至于怎么做这个线性布局 ,我就不再赘述了,说一下控制思想![](http://i.imgur.com/yEbLHQW.png)

指定一个int值变量`int currPage =0;`,其实就是第几页,当前是第一页时 ,不用做判断,当页面0条件满足跳转,点击了下一步,就调用了`ViewPager.setCurrentItem(int page)` 去换fragment(前提是你放在了Viewpager中..),同时处理指示器颜色。到了下一个页面 currPage =1 ,那么可通过自定义tablayout点击进入的页面就是currPage<=1,到页面4  那前3个页面都可以通过点击tab进入,tab(线性布局)的点击事件做如下判断  如果 当前页面是2(页面标记从0开始) ,那么  tab 0~2 都可点击,

case R.id.lin3:

if (currPage > 1) {

vpager_act_supply.setCurrentItem(2);

tab_indic1.setBackgroundColor(getResources().getColor(R.color.white));

tab_indic2.setBackgroundColor(getResources().getColor(R.color.orange));

tab_indic3.setBackgroundColor(getResources().getColor(R.color.white));

tab_indic.setBackgroundColor(getResources().getColor(R.color.white));

}

这样,不满足条件的页面就无法点进去了  哈哈 。