一:效果
1.1 可动态添加或删除tab,更改指定tab的文字。
二:实现思路
- 自定义view,实现效果
- 动态创建textview,有几个tab创建几个textview
- 第一个tab和最后一个tab为圆角矩形,其余的为直角矩形,通过shape文件完成
- 默认选中第一个tab选项,更改背景颜色和textview颜色,更改其余所有tab的颜色
- 设置点击事件,动态更改每一个tab的颜色
三:代码实现
思路我们已经清晰了,下面按照我们的思路编码就行了,没什么难度,下面我就直接贴出代码了,有需要的同学直接拿去用就好了。
在这里重点说一下每个tab中间的分割线,如果不单独做处理的话,你会发现tab的分割线和边框线宽度不一致,影响整体美观度,是因为第一个tab绘制了一遍分割线,第二个tab又绘制了一遍分割线。
博主的处理方式为:
- 为整个自定义view设置一个整体的边框
- 每个tab只设置右边的一条边框,最后一个tab不设置边框,采用 <layer-list> 实现
3.1 自定义view代码
package com.zuohp.jstt.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.zuohp.jstt.R;
import java.util.ArrayList;
import java.util.List;
public class SegmentView extends LinearLayout {
// 实现不同的按钮状态,不同的颜色
ColorStateList cs1 = getResources().getColorStateList(R.color.white);
ColorStateList cs2 = getResources().getColorStateList(R.color.colorPrimaryDark);
private onSegmentViewClickListener segmentListener;
//存放textview的集合
List<TextView> views = new ArrayList<TextView>();
// 这是代码加载ui必须重写的方法
public SegmentView(Context context) {
super(context);
}
// 这是在xml布局使用必须重写的方法
public SegmentView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public SegmentView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//主要方法
public v