第一步
创建几个fragment,并放入集合中
list = new ArrayList<>();
list.add(new OneFragment());
list.add(new TwoFragment());
list.add(new ThreeFragment());
第二步
为viewpager设置适配器
adapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), list); myViewPager.setAdapter(adapter);
public class TabFragmentPagerAdapter extends FragmentStatePagerAdapter { // private FragmentManager mfragmentManager; private List<Fragment> mlist; public TabFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.mlist = list; } @Override public Fragment getItem(int position) { return mlist.get(position); } @Override public int getCount() { return mlist.size(); } }
第三步
在需要的地方使用Tablayout
第一部Tablayout在xml中布局属性
<com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:tabTextColor="@color/colorPrimary" app:tabSelectedTextColor="@color/colorPrimaryDark"/>
其中相关重要的属性还有
app:tabIndicatorColor :指示线的颜色
app:tabIndicatorHeight :指示线的高度
app:tabMode="scrollable" : 默认是fixed,固定的;scrollable:可滚动的
第二部 创建集合添加标题和fragment
fragments = new ArrayList<>(); list_Title = new ArrayList<>(); fragments.add(new Page1()); fragments.add(new Page2()); fragments.add(new Page3()); list_Title.add("测试页面一"); list_Title.add("测试页面二"); list_Title.add("测试页面三"); 第三部 设置适配器
public class MyPagerAdapter extends FragmentPagerAdapter { private Context context; private List<Fragment> fragmentList; private List<String> list_Title; public MyPagerAdapter(FragmentManager fm, Context context, List<Fragment> fragmentList, List<String> list_Title) { super(fm); this.context = context; this.fragmentList = fragmentList; this.list_Title = list_Title; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return list_Title.size(); } /** * //此方法用来显示tab上的名字 * * @param position * @return */ @Override public CharSequence getPageTitle(int position) { return list_Title.get(position); } }
第三部绑定viewpager
tabLayout.setupWithViewPager(viewPager);
注意点
1)fragment三个包要是
import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter;
2)自定义viewpager不可滑动,并解决tab最后一项bug
@Override public boolean onTouchEvent(MotionEvent ev) { return true; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; }
其中:
3)使用select选择器
在drawble文件中设置
<item android:state_selected="false" android:drawable="@color/gray"/> <item android:state_selected="true" android:drawable="@color/red"/>
在代码中设置
myViewPager.setCurrentItem(0); tv_item_one.setSelected(true); tv_item_two.setSelected(false); tv_item_three.setSelected(false);
其中android:state_pressed 是否按下,如一个按钮触摸或者点击。
android:state_selected 被选中
android:state_checkable 组件是否能被check。如:RadioButton是可以被check的android:state_enabled 能够接受触摸或者点击事件