【Android】另一种Tab的实现--TabLayout
来源:互联网 发布:淘宝助理数据设置 编辑:程序博客网 时间:2024/05/19 17:27
在我们的应用市场上的程序,十个应用程序有九个是采用了Tab页卡的这样一种形式。实现的方式也各不相同,古老的TabHost,ViewPager+Fragment+自定义的Title,3.0后ActionBar所提供的Tab,以及各种成熟的Tab开源控件等,都可以直接或间接地实现Tab的效果。在5.0后放出的design包中官方推出了TabLayout控件来方便地实现类似的效果。首先上效果图:
以TabLayout的方式来实现这种页卡的效果非常的方便,顶上的一个TabLayout + 下面的一个ViewPager,ViewPager里面放置Fragment。
dependencies { compile 'com.android.support:design:23.0.1' compile 'com.android.support:support-v4:23.0.1'}TabLayout是依赖于design包的所以需要导入你的Android SDK里面相应的design包和support-v4包。
布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/tab_vp" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /></LinearLayout>
主要的代码:
public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TabLayout tabLayout; //Tab页卡的title private String[] strs = {"首页","发现","我"}; private static final List<Fragment> FRAGMENTS = new ArrayList<Fragment>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //initView tabLayout = (TabLayout) findViewById(R.id.tab_layout); viewPager = (ViewPager) findViewById(R.id.tab_vp); //为TabPagerAdapter准备数据 if(FRAGMENTS.size() == 0){ FRAGMENTS.add(new HomeFragment()); FRAGMENTS.add(new FoundFragment()); FRAGMENTS.add(new MeFragment()); } FragmentManager fm = this.getSupportFragmentManager(); // 构造一个TabPagerAdapter对象 TabPagerAdapter adapter = new TabPagerAdapter(fm, FRAGMENTS); // 设置TabLayout模式 // MODE_FIXED => 所有的tab撑满整个屏幕 // MODE_SCROLLABLE => 整个可滑动的,一般用于Tab比较多的情况下 tabLayout.setTabMode(TabLayout.MODE_FIXED); // 设置Tab的选择监听 tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { // 每当我们选择了一个Tab就将ViewPager滚动至对应的Page viewPager.setCurrentItem(tab.getPosition(), true); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); // 构造一个TabLayoutOnPageChangeListener对象 TabLayout.TabLayoutOnPageChangeListener listener = new TabLayout.TabLayoutOnPageChangeListener(tabLayout); // 设置ViewPager页面改变后的监听 viewPager.addOnPageChangeListener(listener); // 设置从PagerAdapter中获取Tab tabLayout.setTabsFromPagerAdapter(adapter); // 设置ViewPager的适配器 viewPager.setAdapter(adapter); } private class TabPagerAdapter extends FragmentPagerAdapter { private List<Fragment> mList; public TabPagerAdapter(FragmentManager fm,List<Fragment> list) { super(fm); mList = list; } @Override public Fragment getItem(int position) { return mList.get(position); } @Override public int getCount() { return mList.size(); } @Override public CharSequence getPageTitle(int position) { if(position< 0 || position >2) position=0; return strs[position]; } }}
所用的Fragment里面只是使用到了一个TextView,这里就不贴代码了。在文章的最后会给出在Android Studio上的源代码,如果你使用的是Eclipse,请自行搬运。
点击下载源代码
0 0
- 【TabLayout】 Android 另一种Tab的实现
- 【Android】另一种Tab的实现--TabLayout
- TabLayout:另一种Tab的实现方式
- TabLayout:另一种Tab的实现方式
- TabLayout:另一种Tab的实现方式
- TabLayout:另一种Tab的实现方式
- TabLayout:另一种Tab的实现方式
- TabLayout android Tab的一种实现方式
- Android AutoLayout全新的适配方式 堪称适配终结者---TabLayout:另一种 Tab 的实现方式----QuickReturn:用于ScrollView 和 ListView 的
- Android TabLayout setCustomView 实现带图标的tab
- Android TabLayout setCustomView 实现带图标的tab
- Android TabLayout setCustomView 实现带图标的tab
- Android TabLayout与ViewPager实现动态Tab
- Android Tablayout 自定义Tab布局的使用
- Android---Tablayout自定义tab
- android学习-----使用TabLayout实现Tab选项卡以及遇到的一些问题(一)
- android学习-----使用TabLayout实现Tab选项卡以及遇到的一些问题(二)
- 自定义TabLayout的Tab
- 解决Selenium弹出新页面无法定位元素问题(Unable to locate element)
- 一位资深程序员大牛给予Java初学者的学习建议
- 微软开源Malmo AI项目平台 利用Minecraft构建复杂机器人任务
- mySQL的 插入 查询 更新
- [最大流]增广路算法Edmonds-Karp
- 【Android】另一种Tab的实现--TabLayout
- bzoj 4602 DFS
- 华为OJ——成绩排序
- POJ 2407 Relatives
- 选择语句结构if
- Apache修改默认站点目录和虚拟主机配置
- data 目录没有 解决办法
- ios - 调整button内部控件位置
- 华为OJ——矩阵乘法