tablayout 滚动模式_Android底部导航栏(可滑动)----TabLayout+viewPager

【TabLayout】

①TabLayout是选项卡,在屏幕空间有限的情况下,对不同的空间进行分组。属于android supportdesign,更多的用于新闻上,如果放在底部也可做底部导航栏

②TabLayout的选项卡模式有两种:fixed;scrollable;

tabLayout.setTabMode(TabLayout.MODE_FIXED);设置选项卡模式为fixed

tabSelectedTextColor:选中时,字的颜色,适用于tabItem的普通模式;

tabIndicatorHeight:设置指示器的高度,如果为0表示没有指示器,适用于tabItem的普通模式;(在作为底部导航时,需隐藏指示器)

tabIndicatorColor:设置指示器颜色,适用于tabItem的普通模式;

?设置Tab页的自定义View

TabLayout.getTabAt(index).setCustomView(view);

?如果无需自定义View

可重写ViewPagerAdapter(绑定当前页面viewPager的Adapter类)中的方法getPageTitle

@Override

public CharSequence getPageTitle(intposition) {

returntitleList[position];

}

//准备titleList数据为Tab页的标题

String[] titleList = new String[]{"A","B","C"};

④与ViewPager结合

TabLayout.setUpWithViewPager(viewPager);

?TabLayouit的Tab切换事件

onTabselectedListener事件{

该事件(接口)包含多个回调(callback)方法:

void onTabSelected(TabLayout.Tab tab):

选中某一个选项;

void onTabUnSelected(TabLayout.Tab tab):

放弃选中某一个选项;

void onTabReSelected(TabLayout.Tab tab):

已选择,再次选中这个选项

}

⑥此处作为底部导航栏

<1>、设置选项卡模式为fixed

tabLayout.setTabMode(TabLayout.MODE_FIXED);

<2>、隐藏下方的指示条

tabLayout.setSelectedTabIndicatorHeight(0);

<3>、重写tabLayout的选项卡点击事件

在选中时可对底部图片进行变色或更换图片处理,将选中的Tab视图突出显示。将未选中的标签进行还原

注:另外此项目使用butterKnife,详情请参考 【butterKnite的使用】

【效果】

【项目结构】

【步骤】

①添加design依赖(build.gradle)

implementation 'com.android.support:design:27.1.1'

②activity_main_nav.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

3 xmlns:app="http://schemas.android.com/apk/res-auto"

4 xmlns:tools="http://schemas.android.com/tools"

5 android:layout_width="match_parent"

6 android:layout_height="match_parent"

7 tools:context=".MainNavActivity"

8 android:orientation="vertical">

9

11 android:layout_width="match_parent"

12 android:layout_height="0dp"

13 android:layout_weight="1">

14

15

16

17

19 android:background="@color/blackBg"

20 android:layout_width="match_parent"

21 android:layout_height="?attr/actionBarSize"

22 android:scrollIndicators="none"

23 >

24

25

26

27

?创建底部的自定义布局main_tab_item.xml

1 <?xml version="1.0" encoding="utf-8"?>

2

4 android:layout_width="match_parent"

5 android:layout_weight="1"

6 android:layout_height="wrap_content"

7 android:orientation="vertical"

8 android:background="@color/blackBg">

9

10

12 android:layout_width="40dp"

13 android:layout_height="40dp"

14 android:layout_gravity="center"

15 android:padding="5sp"

16 android:scaleType="fitCenter"

17 android:src="@mipmap/ic_launcher"

18 />

19

21 android:layout_width="match_parent"

22 android:layout_height="wrap_content"

23 android:gravity="center"

24 android:textColor="@color/writeTx"

25 android:text="聊天"

26 android:textSize="12sp"/>

27

28

④新建四个Fragment待使用

?准备四个底部图标

⑥添加MainPageAdapter.java将四个fragment绑定到viewPager上

1 public class MainPageAdpater extendsFragmentPagerAdapter {2

3 List fragmentList = null;4

5 publicMainPageAdpater(FragmentManager fm) {6 super(fm);7 }8

9 public MainPageAdpater(FragmentManager fm, ListfragmentList) {10 super(fm);11 this.fragmentList =fragmentList;12 }13

14 @Override15 public Fragment getItem(intposition) {16 returnfragmentList.get(position);17 }18

19 @Override20 public intgetCount() {21 returnfragmentList.size();22 }23

24 }

⑦修改MainNavActivity.class

1 public class MainNavActivity extendsAppCompatActivity {2

3 @BindView(R.id.viewPager)4 ViewPager viewPager;5 @BindView(R.id.tabLayout)6 TabLayout tabLayout;7

8 @Override9 protected voidonCreate(Bundle savedInstanceState) {10 super.onCreate(savedInstanceState);11 setContentView(R.layout.activity_main_nav);12 ButterKnife.bind(this);13

14 //初始化底部导航

15 initBottomNav();16 }17

18 int[] ivTabs;19 String[] tvTabs;20 //底部导航

21 private voidinitBottomNav() {22 List fragmentList = new ArrayList<>();23 fragmentList.add(newChatFragment());24 fragmentList.add(newContactFragment());25 fragmentList.add(newFindFragment());26 fragmentList.add(newMeFragment());27 viewPager.setAdapter(newMainPageAdpater(getSupportFragmentManager(),fragmentList));28 tabLayout.setupWithViewPager(viewPager);29 tabLayout.setTabMode(TabLayout.MODE_FIXED);30

31 ivTabs = new int[]{R.drawable.chat,R.drawable.contact,R.drawable.find,R.drawable.me};32 tvTabs = new String[]{"聊天","通讯录","发现","我的"};33

34 for (int i = 0; i < fragmentList.size(); i++) {35 View view = LayoutInflater.from(this).inflate(R.layout.main_tab_item, null, false);36 ImageView ivTab=view.findViewById(R.id.ivTab);37 TextView tvTab=view.findViewById(R.id.tvTab);38

39 ivTab.setImageResource(ivTabs[i]);40 tvTab.setText(tvTabs[i]);41 if (i==0){42 ivTab.setColorFilter(Color.GREEN);43 tvTab.setTextColor(Color.GREEN);44 }45 tabLayout.getTabAt(i).setCustomView(view);46 }47 tabLayout.setSelectedTabIndicatorHeight(0);48 tabLayout.setOnTabSelectedListener(newTabLayout.OnTabSelectedListener() {49 @Override50 public voidonTabSelected(TabLayout.Tab tab) {51 View customView =tab.getCustomView();52 ImageView iv =customView.findViewById(R.id.ivTab);53 TextView tv =customView.findViewById(R.id.tvTab);54 iv.setColorFilter(Color.GREEN);55 tv.setTextColor(Color.GREEN);56 }57

58 @Override59 public voidonTabUnselected(TabLayout.Tab tab) {60 View customView =tab.getCustomView();61 ImageView iv =customView.findViewById(R.id.ivTab);62 TextView tv =customView.findViewById(R.id.tvTab);63 iv.setColorFilter(Color.WHITE);64 tv.setTextColor(Color.WHITE);65 }66

67 @Override68 public voidonTabReselected(TabLayout.Tab tab) {69

70 }71 });72

73 }74

75 }


版权声明:本文为weixin_35844236原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。