虽然现在回答这个问题可能有点晚了,但我意识到我写的 an answer on a similar question 涵盖了使用设计支持库和在 Google I/O 之前。
我已包含以下基本部分:
自从 Android 设计支持库发布以来,使用 TabLayout 和 Toolbar 变得更加简单,这意味着我们不再需要下载自定义视图类。
来自Android Developers' Blogspot post on the Android Design Support Library:
标签:
通过tabs 在您的应用程序中的不同视图之间切换并不是材料设计的新概念,它们与top level navigation pattern 或用于在您的应用程序中组织不同的内容分组(例如,不同类型的音乐)。
设计库的TabLayout 实现了两个固定选项卡,其中视图的宽度在所有选项卡之间平均分配,以及可滚动选项卡,其中选项卡的大小不统一并且可以水平滚动。可以通过编程方式添加标签:
TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
但是,如果您使用ViewPager 在选项卡之间进行水平分页,则可以直接从PagerAdapter 的getPageTitle() 创建选项卡,然后使用setupWithViewPager() 将两者连接在一起。这可确保选项卡选择事件更新 ViewPager 并且页面更改更新选定的选项卡。
如果您不使用设计支持库,则需要执行以下操作:
1. 从 GitHub 上的 Google I/O 会议应用程序下载 SlidingTabLayout.java 和 SlidingTabStrip.java 文件。这些将是在选项卡布局中使用的视图,因此我创建了一个包含其他 Java 活动的文件夹,称为“视图”并将它们放在那里。
2. 编辑您的布局以包含SlidingTabLayout:
<LinearLayout
android:orientation="vertical"
... >
<!-- This is the Toolbar with the tabs underneath -->
<LinearLayout
android:orientation="vertical"
... >
<include android:id="@+id/my_toolbar" layout="@layout/toolbar" />
<com.mycompany.myapp.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:background="?attr/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- This is the ViewPager (which you already should have if you have
used tabs before) -->
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
...
</LinearLayout>
引用Toolbar (<include android:id="@+id/detail_toolbar" layout="@layout/toolbar" />) 的行正在引用另一个我用来制作Toolbar 的XML 文件。
3. 将SlidingTabLayout.java 和SlidingTabStrip.java 中的包名更改为与放置位置相对应。就我而言,我对这两个文件都使用了类似的东西:package com.mycompany.myapp.view;。按照您使用的 IDE 的说明,组织导入并添加任何必要的内容。
4. 在您的Activity(扩展AppCompatActivity)中,在onCreate 方法中设置Toolbar:
Toolbar toolbar = (Toolbar) findViewById(R.id.detail_toolbar);
setSupportActionBar(toolbar);
5.设置ViewPager和SlidingTabLayout部分:
mViewPager = (ViewPager) findViewById(R.id.view_pager);
mViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.tab_line));
mSlidingTabLayout.setDistributeEvenly(true);
mSlidingTabLayout.setViewPager(mViewPager);
颜色“tab_line”是我在color.xml 中声明的颜色,它是制表符行指示器的颜色。另请注意,上面的变量是我之前在此活动中定义的全局变量:
SlidingTabLayout mSlidingTabLayout;
ViewPager mViewPager;
6. 最后,设置我之前调用的ViewPagerAdapter。这将负责根据选择的选项卡更改页面。我使用了以下代码:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
// Returns the number of tabs
return 3;
}
@Override
public Fragment getItem(int position) {
// Returns a new instance of the fragment
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentThree();
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}
如上所述,有关这些解决方案的更多详细信息,请访问 another question I answered, about using Sliding Tabs with the Toolbar。