1.导包design
implementation 'com.android.support:design:26.1.0'
2.主布局
如果Tab标题想要平均分配宽度就添加这些属性
app:tabMaxWidth="0dp" app:tabGravity="fill" app:tabMode="fixed"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="comqq.example.hasee.myapplication.MainActivity"
android:orientation="horizontal">
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/tl"
android:background="#fff342"
app:tabIndicatorColor="@color/colorAccent"
app:tabIndicatorHeight="4dp"
//点击选中时文字改变颜色
app:tabSelectedTextColor="@color/colorAccent"
app:tabTextColor="#000000">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</LinearLayout>
<!--是否可以滚动,默认fixed:app:tabMode="scrollable/fixed"-->
<!--指示器高度:app:tabIndicatorHeight="4dp"-->
<!--底部的横杆指示器的颜色:app:tabIndicatorColor="#3381f5"-->
<!--tab被选中的字体颜色:app:tabSelectedTextColor="#f00"-->
<!--tab默认的字体颜色:app:tabTextColor="#c4bfbf"-->
<!--tab字体的样式:app:tabTextAppearance="@style/MyCustomTabTextAppearance"-->
<!--tablayout的背景色:app:tabBackground="@color/greenLight" 和android:backgroud是一样的效果-->
<!--下面都是tab的padding设置:-->
<!--app:tabPadding="5dp"-->
<!--app:tabPaddingBottom="5dp"-->
<!--app:tabPaddingEnd="5dp"-->
<!--app:tabPaddingStart="5dp"-->
<!--app:tabPaddingTop="5dp"-->
<!--TabLayout布局的位置:app:tabGravity="center/fill" center:整体居中显示;fill:占满父布局,当然还和layout_width相关-->
<!--tablayout距离start的距离:app:tabContentStart="100dp"-->
<!--tab的最大宽度:app:tabMaxWidth="100dp"-->
<!--tab的最小宽度:app:tabMinWidth="50dp"-->
设置Tab平分宽度
top_table.setTabMode(TabLayout.MODE_FIXED);不在起作用。
效果如图:
此时的解决办法,设置
app:tabMaxWidth="0dp" 此值即可解决
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
app:tabMode="fixed" />
3.Fragment代码
public class BlankFragment extends Fragment {
public BlankFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_blank, container, false);
TextView tv1 = inflate.findViewById(R.id.tv1);
String string = getArguments().getString("key");
tv1.setText(string);
return inflate;
}
}
4.Fragment布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="comqq.example.hasee.myapplication.BlankFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
5.主函数
public class MainActivity extends AppCompatActivity {
private ViewPager vp;
private TabLayout tl;
private ArrayList<Fragment> arr;
private ArrayList<String> arr2;
private spq sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp= (ViewPager) findViewById(R.id.vp);
tl= (TabLayout) findViewById(R.id.tl);
arr=new ArrayList<>();
arr2=new ArrayList<>();
for (int i = 0; i < 10; i++) {
BlankFragment blan = new BlankFragment();
Bundle bundle = new Bundle();
bundle.putString("key","第"+i+"页");
blan.setArguments(bundle);
arr.add(blan);
}
sp = new spq(getSupportFragmentManager(), arr, arr2);
vp.setAdapter(sp);
tl.setupWithViewPager(vp);
// 设置tablayout为滚动模式
tl.setTabMode(TabLayout.MODE_SCROLLABLE);
}
public void start(View view) {
// 删除tablayout对应的指定标签
// tablayout.removeTabAt(4);
// 按钮点击事件,点击删除viewpager的某一个页面
sp.removePos(4);
}
}
6.Fragment适配器
public class spq extends FragmentPagerAdapter {
private ArrayList<Fragment> arr;
private ArrayList<String> arr2;
public spq(FragmentManager fm, ArrayList<Fragment> arr, ArrayList<String> arr2) {
super(fm);
this.arr = arr;
this.arr2 = arr2;
}
@Override
public Fragment getItem(int position) {
return arr.get(position);
}
@Override
public int getCount() {
return arr.size();
}
public void removePos(int pos){
arr.remove(pos);
arr2.remove(pos);
this.notifyDataSetChanged(); //数据源发生变化,提醒更新
}
@Override
public CharSequence getPageTitle(int position) {
return arr2.get(position);
}
}