Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 589|回复: 0

[默认分类] Android Tablayout使用示例及详解

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-8 16:55:06 | 显示全部楼层 |阅读模式

    1. Tablayout是安卓新特性中的组件,之前很多地方都会用到这样的组件,只是我们一般都是通过tabactivity加fragment或者其他第三方框架来实现,谷歌推出tablayout以后,使这个组件简化了许多,只需要一个tablayout加一个viewpager就可以实现想要的效果。今天就讲一下tablayout如何配合viewpager一起使用。
    2. 我们要想使用安卓的新组建,如果你使用的是android studio进行开发的只要在build.gradle中加入compile "com.android.support:design:22.2.0"即可。(此处注意如果你同时导入[b]com.android.support:*****-v7:21+就会有冲突,无法使用tablayout,笔者就在使用的过程中遇到,添加了依赖包以后一直提示找不到tablayout[/b])。如果是eclipse的话导入对应的库就可以。这个就不多废话了,开始原文吧。
    3. 开始之前我们先来看一下google官方文档的原文,如何与ViewPager进行联动:
    4.   [quote]
    5.    You should set a listener via setOnTabSelectedListener(OnTabSelectedListener) to be notified when any tab’s selection state has been changed.
    6. If you’re using a ViewPager together with this layout, you can use setTabsFromPagerAdapter(PagerAdapter) which will populate the tabs using the given PagerAdapter’s page titles. You should also use a TabLayout.TabLayoutOnPageChangeListener to forward the scroll and selection changes to this layout
    7.   [/quote]意思就是
    8.   
    9.              通过setOnTabSelectedListener设置一个监听器来响应选项卡的选择状态
    10.    
    11.              可以通过setTabsFromPagerAdapter来使用PagerAdapter的page title
    12.    
    13.              使用TabLayout.TabLayoutOnPageChangeListener来联动滑动。
    14.    
    15.   
    16.   
    17.    
    18.   
    19.   
    20.    以下为整个源代码以及讲解。
    21.   
    22.   
    23.        我们先来写布局界面
    24.   
    25.   
    26.       
    27.    
    28.   [code]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"            xmlns:app="http://schemas.android.com/apk/res-auto"
    29.             android:layout_width="match_parent"
    30.             android:layout_height="match_parent"
    31.             android:orientation="vertical">
    32.             <android.support.design.widget.TabLayout
    33.                     android:id="@+id/tablayout"
    34.                     android:layout_width="match_parent"
    35.                     android:layout_height="wrap_content"
    36.                     android:background="@color/titleBlue"
    37.                     app:tabIndicatorColor="@color/white"
    38.                     app:tabSelectedTextColor="@color/gray"
    39.                     app:tabTextColor="@color/white"
    40.                     />
    41.             <android.support.v4.view.ViewPager
    42.                     android:id="@+id/vviewpager"
    43.                     android:layout_width="fill_parent"
    44.                     android:layout_height="0dp"
    45.                     android:layout_weight="1"
    46.                     />
    47.     </LinearLayout>
    复制代码

      
       
      
      
       布局界面很简单,一个容器中放一个tablayout,放一个viewpager,tablayout有很多属性,这里就不一一介绍了。下面列出他的是哪个很重要的属性。
      
      
       
      
    1. app:tabIndicatorColor="@color/white"                 // (指示器下表的颜色)下方滚动的下划线颜色  app:tabSelectedTextColor="@color/gray"               // tab被选中后,文字的颜色  app:tabTextColor="@color/white"                      // tab默认的文字颜色(即未被选中的颜色)//如果用到app:的属性,需要在跟布局中加入xmlns:app="http://schemas.android.com/apk/res-auto"
    复制代码
      [/code]
    1. [/code]
    2. [code]
    复制代码
    1. [/code]
    2. [code]
    复制代码
    下面是类的代码。

    1. /**
    2. * Created by rain on 2015-12-09.
    3. */
    4. public class HomeFragment extends Fragment {
    5.     private TabLayout tabLayout;
    6.     @Override
    7.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    8.         View view = inflater.inflate(R.layout.fragment_home, container, false);
    9.         ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    10.         if (viewPager != null) {
    11.             setupViewPager(viewPager);
    12.         }
    13.         setupTabLayout();
    14.         return super.onCreateView(inflater, container, savedInstanceState);
    15.     }
    16.     //设置tablayout,
    17.     private void setupTabLayout() {
    18.         tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    19.         tabLayout.setupWithViewPager(viewPager);
    20.         //一下几个重要属性都可以自己选择性进行设置。
    21.         //tabLayout.setSelectedTabIndicatorColor();
    22.         //tabLayout.setSelectedTabIndicatorHeight();
    23.         //tabLayout.setOnTabSelectedListener();
    24.         //tabLayout.setTabGravity();
    25.         //tabLayout.setTabTextColors(int normalColor,int selectColor);
    26.         //将tablayout与viewpager进行绑定,下面会有讲解。
    27.         tabLayout.setupWithViewPager(viewPager);
    28.     }
    29.     //设置viewpager
    30.     private void setupViewPager(ViewPager viewPager) {
    31.         Adapter adapter = new Adapter(getActivity().getSupportFragmentManager());
    32.         adapter.addFragment(new CheeseListFragment(), "Category 1");
    33.         adapter.addFragment(new CheeseListFragment(), "Category 2");
    34.         adapter.addFragment(new CheeseListFragment(), "Category 3");
    35.         viewPager.setAdapter(adapter);
    36.     }
    37.     //设置viewpager的adapter
    38.     static class Adapter extends FragmentPagerAdapter {
    39.         private final List<Fragment> mFragments = new ArrayList<>();
    40.         private final List<String> mFragmentTitles = new ArrayList<>();
    41.         public Adapter(FragmentManager fm) {
    42.             super(fm);
    43.         }
    44.         public void addFragment(Fragment fragment, String title) {
    45.             mFragments.add(fragment);
    46.             mFragmentTitles.add(title);
    47.         }
    48.         @Override
    49.         public Fragment getItem(int position) {
    50.             return mFragments.get(position);
    51.         }
    52.         @Override
    53.         public int getCount() {
    54.             return mFragments.size();
    55.         }
    56.         @Override
    57.         public CharSequence getPageTitle(int position) {
    58.             return mFragmentTitles.get(position);
    59.         }
    60.     }
    61. }
    复制代码




      
      
    1. 相信这个代码很好理解,我这里是用fragment做的框架,大家改成activity也是一样的。我们先在布局文件里定义好tablayout和viewpager,在代码中实例化,先设置viewpaer的adapter,然后设置tablayout的属性。最后将tablayout与viewpager进行绑定就完成了。
    复制代码
      
    1. 我看到有人在使用tablayout的时候还在mTabLayout.setOnTabSelectedListener来设置viewpager,我想说这样就没有必要用tablayout。他已经在setupWithViewPager里面讲这些代码封装好了。大家只要使用就可以了;以下setupWithViewPager的源码,相信大家看了就会明白。
    复制代码
    1. public void setupWithViewPager(@NonNull ViewPager viewPager) {
    2.     final PagerAdapter adapter = viewPager.getAdapter();
    3.     if (adapter == null) {
    4.         throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set");
    5.     }
    6.     // First we"ll add Tabs, using the adapter"s page titles
    7.     setTabsFromPagerAdapter(adapter);
    8.     // Now we"ll add our page change listener to the ViewPager
    9.     viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(this));
    10.     // Now we"ll add a tab selected listener to set ViewPager"s current item
    11.     setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));
    12.     // Make sure we reflect the currently set ViewPager item
    13.     if (adapter.getCount() > 0) {
    14.         final int curItem = viewPager.getCurrentItem();
    15.         if (getSelectedTabPosition() != curItem) {
    16.             selectTab(getTabAt(curItem));
    17.         }
    18.     }
    19. }
    复制代码
    如果想要了解更多属性可以去看一下谷歌的官方文档
    http://developer.android.com/intl/zh-cn/reference/android/support/design/widget/TabLayout.html[code][/code]
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-14 23:19 , Processed in 0.398503 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表