使用TabLayout 实现顶部选项卡功能
来源:互联网 发布:阿里云青岛机房位置 编辑:程序博客网 时间:2024/05/20 17:39
Demo下载连接 :点击打开链接
TabLayout 是谷歌在2015年I/O大会中提出的 很方便的实现顶部选项卡功能 文档中的描述:
Population of the tabs to display is done through TabLayout.Tab instances. You create tabs via newTab(). From there you can change the tab's label or icon via setText(int) and setIcon(int) respectively. To display the tab, you need to add it to the layout via one of the addTab(Tab) methods. For example: TabLayout tabLayout = ...; tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
简单就是说选项卡是通过Tablayout实现的 通过newTab创建每一个tab 可以通过setText()和setIcon分别设置文本和icon 最后通过addTab将newTab处的选项卡添加上去 即可 但是这个是单一的选项卡使用 一般使用选项卡我们都是和viewpager相结合使用的 谷歌文档中也告诉了我们的实现方法:
You should set a listener via setOnTabSelectedListener(OnTabSelectedListener) to be notified when any tab's selection state has been changed.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 like so: ViewPager viewPager = ...; TabLayout tabLayout = ...; viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(tabLayout));
通过设置setOnTabSelectedListener(OnTabSelectedListener)去监听tab的切换事件 如果使用viewpager和TabLayout相结合的话 要设置Tablayout的
setTabsFromPagerAdapter(PagerAdapter)的方法 并且将viewpagerAdapter传入 这个viewpagerAdapter中需要返回title 即要实现getPagerTitle()方法 同时也需要设置
TabLayout.TabLayoutOnPageChangeListener
去监听viewpager的左右滑动事件
综合上述文档我们可以轻松的实现一个简单的TabLayout的Demo
public class NewsViewPagerFragment extends Fragment { private View inflate; private TabLayout tabLayout; private ViewPager vp; public static String[] names = {"第一个标签", "第二个标签", "第三个标签"}; public static int[] layouts = {R.layout.explore, R.layout.hot, R.layout.account}; private MyAdapter myAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { inflate = inflater.inflate(R.layout.blog, null); tabLayout = (TabLayout) inflate.findViewById(R.id.tab_layout); vp = (ViewPager) inflate.findViewById(R.id.viewpager); myAdapter = new MyAdapter(); tabLayout.setTabsFromPagerAdapter(myAdapter); vp.setAdapter(myAdapter); vp.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.blue)); //设置线的颜色 tabLayout.setTabTextColors(getResources().getColor(R.color.yellow), getResources().getColor(R.color.blue)); //设置文本的颜色 return inflate; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { //tab被选中是触发 int position = tab.getPosition(); vp.setCurrentItem(position); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } class MyAdapter extends PagerAdapter { @Override public int getCount() { return layouts.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public CharSequence getPageTitle(int position) { return names[position]; } @Override public Object instantiateItem(ViewGroup container, int position) { View inflate = View.inflate(getActivity(), layouts[position], null); container.addView(inflate); return inflate; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="56dp" android:background="#f0f0f0" app:tabMode="fixed"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </android.support.v4.view.ViewPager></LinearLayout>
可以下载实例代码看下
点击打开链接
0 0
- 使用TabLayout 实现顶部选项卡功能
- Tablayout+Fragment顶部选项卡实现
- TabLayout+Fragment实现顶部选项卡
- Android使用TabLayout实现选项卡
- 使用Android Support Design 控件TabLayout 方便快捷实现选项卡功能
- 两种实现选项卡功能----自定义和TabLayout
- 使用TabLayout和ViewPager实现左右滑动选项卡
- Android使用TabLayout+ViewPager实现顶部滑动菜单栏
- 使用TabLayout和ViewPager实现顶部标签页
- Android——TabLayout实现选项卡
- 总结项目使用一个TabLayout选项卡
- Android选项卡TabLayout简单使用
- android学习-----使用TabLayout实现Tab选项卡以及遇到的一些问题(一)
- android学习-----使用TabLayout实现Tab选项卡以及遇到的一些问题(二)
- Android开发之TabLayout的使用(实现三种常用的选项卡效果)
- TabLayout选项卡
- TabLayout+ViewPager自定义view实现图文混排微信选项卡框架和联动切换同步改变数据功能
- 使用jQuery实现返回顶部功能
- java默认构造器constructor
- 第十五周实践项目2—用哈希法组织关键字
- js中闭包原理谈和原型及例子
- MongoDB操作数据库的几个命令(自己用)
- 第14周项目1(2) 验证分块查找算法
- 使用TabLayout 实现顶部选项卡功能
- cocoa pods安装出错
- 第十五周项目--直接排序法
- Freescale IMX6 Android (3): 手动制作Android启动用SD卡 省去MFGTOOLS烧写
- Android实现沉浸式通知栏,通知栏可以根据app的颜色可改变啦
- Java 学习历程(三)this关键字和static关键字
- 进程和线程关系及区别
- 第14周项目3-是否二叉排序树
- GoEasy在web端推送及接收