Android底部导航栏实现(四)之TabLayout+ViewPager

 这里简单记录一下通过TabLayout+ViewPager来实现Android底部导航栏。

在中江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作定制网站建设,公司网站建设,企业网站建设,品牌网站制作,全网营销推广,成都外贸网站建设,中江网站建设费用合理。

布局

 
 
 
 
  1.                 xmlns:app="http://schemas.android.com/apk/res-auto"
  2.                 android:layout_width="match_parent"
  3.                 android:layout_height="match_parent"
  4.                 android:orientation="vertical">
  5.     
  6.     
  7.         android:layout_width="match_parent"
  8.         android:layout_height="match_parent"
  9.         android:orientation="vertical">
  10.         
  11.             android:id="@+id/view_pager"
  12.             android:layout_width="match_parent"
  13.             android:layout_height="0dp"
  14.             android:layout_weight="1">
  15.         
  16.             android:id="@+id/tab_layout"
  17.             android:layout_width="match_parent"
  18.             android:layout_height="56dp"
  19.             app:tabBackground="@color/white"
  20.             app:tabIndicatorHeight="0dp"
  21.             app:tabSelectedTextColor="@color/colorPrimary"
  22.             app:tabTextAppearance="@style/tabTextSizeStyle"
  23.             app:tabTextColor="@color/black_1">
  24.     
  25.  

代码

 
 
 
 
  1. mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
  2.         mTabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
  3.         initTabList();
  4.         mAdapter = new TabLayoutFragmentAdapter(getChildFragmentManager(), mTabList, getActivity(), mFragments, mTabImgs);
  5.         mViewPager.setAdapter(mAdapter);
  6.         mViewPager.setCurrentItem(0);
  7.         mTabLayout.setupWithViewPager(mViewPager);
  8.         mTabLayout.setTabMode(TabLayout.MODE_FIXED);//设置TabLayout的模式
  9.         for (int i = 0; i < mTabLayout.getTabCount(); i++) {
  10.             mTabLayout.getTabAt(i).setCustomView(mAdapter.getTabView(i));
  11.         }
  12.         mTabLayout.addOnTabSelectedListener(this);//设置TabLayout的选中监听 

这里需要注意的就是TabLayout的使用。TabLayou配合ViewPager使用。要用 mTabLayout.setupWithViewPager(mViewPager);使二者联系起来。另外这里面使用的是customView,当然TabLayout自带方法也可实现icon+text的效果。也就是效果:TabLayout + ViewPager 2

根据Tab选中状态显示Tab键效果

 
 
 
 
  1. @Override
  2.    public void onTabSelected(TabLayout.Tab tab) {
  3.        setTabSelectedState(tab);
  4.    }
  5.    @Override
  6.    public void onTabUnselected(TabLayout.Tab tab) {
  7.        setTabUnSelectedState(tab);
  8.    }
  9.    @Override
  10.    public void onTabReselected(TabLayout.Tab tab) {
  11.    }
  12. private void setTabSelectedState(TabLayout.Tab tab) {
  13.        View customView = tab.getCustomView();
  14.        TextView tabText = (TextView) customView.findViewById(R.id.tv_tab_text);
  15.        ImageView tabIcon = (ImageView) customView.findViewById(R.id.iv_tab_icon);
  16.        tabText.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
  17.        String s = tabText.getText().toString();
  18.        if (getString(R.string.item_home).equals(s)) {
  19.            tabIcon.setImageResource(R.drawable.home_fill);
  20.        } else if (getString(R.string.item_location).equals(s)) {
  21.            tabIcon.setImageResource(R.drawable.location_fill);
  22.        } else if (getString(R.string.item_like).equals(s)) {
  23.            tabIcon.setImageResource(R.drawable.like_fill);
  24.        } else if (getString(R.string.item_person).equals(s)) {
  25.            tabIcon.setImageResource(R.drawable.person_fill);
  26.        }
  27.    }
  28.    private void setTabUnSelectedState(TabLayout.Tab tab) {
  29.        View customView = tab.getCustomView();
  30.        TextView tabText = (TextView) customView.findViewById(R.id.tv_tab_text);
  31.        ImageView tabIcon = (ImageView) customView.findViewById(R.id.iv_tab_icon);
  32.        tabText.setTextColor(ContextCompat.getColor(getActivity(), R.color.black_1));
  33.        String s = tabText.getText().toString();
  34.        if (getString(R.string.item_home).equals(s)) {
  35.            tabIcon.setImageResource(R.drawable.home);
  36.        } else if (getString(R.string.item_location).equals(s)) {
  37.            tabIcon.setImageResource(R.drawable.location);
  38.        } else if (getString(R.string.item_like).equals(s)) {
  39.            tabIcon.setImageResource(R.drawable.like);
  40.        } else if (getString(R.string.item_person).equals(s)) {
  41.            tabIcon.setImageResource(R.drawable.person);
  42.        }
  43.    } 

这里面不用设置defaultFragment,TabLayout会默认显示***个;

另外,这里也贴出使用TabLayout自带方法来实现效果代码

值得说的是,自带方法不能自定义icon和text的间距。用起来很方便,但是可能不是你要求的那个尺寸大小。我没有去深究这里面的源码。如果有人知道这个自带方法怎么改变的,也请告知一下。

 
 
 
 
  1.  mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
  2.         mTabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
  3.         initTabList();
  4.         mAdapter = new TabLayoutFragment2Adapter(getChildFragmentManager(), mTabList, getActivity(), mFragments, mTabImgs);
  5.         mViewPager.setAdapter(mAdapter);
  6.         mViewPager.setCurrentItem(0);
  7.         mTabLayout.setupWithViewPager(mViewPager);
  8.         mTabLayout.setTabMode(TabLayout.MODE_FIXED);
  9. //        for (int i = 0; i < mTabLayout.getTabCount(); i++) {
  10. //            mTabLayout.getTabAt(i).setCustomView(mAdapter.getTabView(i));
  11. //        }
  12.         mTabLayout.addOnTabSelectedListener(this);
  13. //        mViewPager.setCurrentItem(0);
  14.         mTabLayout.getTabAt(0).setIcon(R.drawable.home_fill);//自有方法添加icon
  15.         mTabLayout.getTabAt(1).setIcon(R.drawable.location);
  16.         mTabLayout.getTabAt(2).setIcon(R.drawable.like);
  17.         mTabLayout.getTabAt(3).setIcon(R.drawable.person); 

Tab切换

 
 
 
 
  1. @Override
  2.     public void onTabSelected(TabLayout.Tab tab) {
  3. //        setTabSelectedState(tab);//这个也无需使用
  4.         resetTabIcon();
  5.         int position = tab.getPosition();
  6.         Log.e("Kevin", "position--->" + position);
  7.         switch (position) {
  8.             case 0:
  9.                 tab.setIcon(R.drawable.home_fill);
  10.                 break;
  11.             case 1:
  12.                 tab.setIcon(R.drawable.location_fill);
  13.                 break;
  14.             case 2:
  15.                 tab.setIcon(R.drawable.like_fill);
  16.                 break;
  17.             case 3:
  18.                 tab.setIcon(R.drawable.person_fill);
  19.                 break;
  20.         }
  21.     }
  22. private void resetTabIcon() {
  23.         mTabLayout.getTabAt(0).setIcon(R.drawable.home);
  24.         mTabLayout.getTabAt(1).setIcon(R.drawable.location);
  25.         mTabLayout.getTabAt(2).setIcon(R.drawable.like);
  26.         mTabLayout.getTabAt(3).setIcon(R.drawable.person);
  27.     } 

说明:这几篇文章没有过多的文字叙述,因为这些东西也不是很难,而且都是常用的,相信很多人都了如指掌了,多说亦是废话,直接上代码看的反而更清楚。

网站题目:Android底部导航栏实现(四)之TabLayout+ViewPager
URL网址:http://www.hantingmc.com/qtweb/news16/14466.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联