看看Android“L”预览的API diff报告,我看到所有与ActionBar类中的导航模式相关的方法(如setNavigationMode(), addTab(), selectTab(), &c)。现在已弃用。
文档解释说:
操作栏导航模式已弃用,内联不支持 工具栏操作栏。考虑使用其他常见的导航模式 代替。
替换的是什么?
另外,“内联工具栏操作栏”是一个新概念吗?我想我以前没听说过。
看看Android“L”预览的API diff报告,我看到所有与ActionBar类中的导航模式相关的方法(如setNavigationMode(), addTab(), selectTab(), &c)。现在已弃用。
文档解释说:
操作栏导航模式已弃用,内联不支持 工具栏操作栏。考虑使用其他常见的导航模式 代替。
替换的是什么?
另外,“内联工具栏操作栏”是一个新概念吗?我想我以前没听说过。
当前回答
对于已弃用的ActionBar的“替换”,我将我的ActionBar类型变量的类型更改为PagerTabStrip,按照(注释中的旧代码):
// ActionBar bigActionBar;
PagerTabStrip bigActionBar;
~actionBar的.selectTab(tabindex)的“替换”是使用我相关的ViewPager的.setCurrentItem(int)方法,就像这样(注释中的旧代码):
/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);
希望这对你有帮助。
其他回答
新的工具栏不能用于扩展多个行对象,因此不可能向其添加选项卡。 如果你想使用一个像TabWidget一样的工具栏,你可以插入一些标签对象,但只能使用旧的Holo风格。
这里有一个自定义库,使用v7工具栏,如TabWidget与新的材质设计动画,但它使用相同的方法从旧的ActionBar选项卡,所以你可以附加你的ViewPager到它。
我发现这些教程在一起的操作栏(现在的“工具栏”- argh),支持滑动标签与材料设计很有帮助:
https://www.youtube.com/watch?v=Fl0xMuo10yA
http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html
你必须综合这些资源来匹配你的特定情况。例如,您可能不想手动创建与exoguru.com教程相同的样式的选项卡。
对于已弃用的ActionBar的“替换”,我将我的ActionBar类型变量的类型更改为PagerTabStrip,按照(注释中的旧代码):
// ActionBar bigActionBar;
PagerTabStrip bigActionBar;
~actionBar的.selectTab(tabindex)的“替换”是使用我相关的ViewPager的.setCurrentItem(int)方法,就像这样(注释中的旧代码):
/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);
希望这对你有帮助。
FragmentTabHost也是一个选项。
这段代码来自Android开发者的网站:
/**
* This demonstrates how you can implement switching between the tabs of a
* TabHost through fragments, using FragmentTabHost.
*/
public class FragmentTabs extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_tabs);
mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
FragmentStackSupport.CountingFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
LoaderCursorSupport.CursorLoaderListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
LoaderCustomSupport.AppListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
}
}
我也遇到过同样的问题,这个解决方案非常适合我:
在包含viewpager的布局xml文件中,添加如下所示的PagerTabStrip:
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tab_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#996633"
android:textColor="#CCCCCC"
android:paddingTop="5dp"
android:paddingBottom="5dp" />
要控制页面标题,在ViewPager文件中添加switch语句:
@Override
public CharSequence getPageTitle(int position)
{
switch (position)
{
case 0:
return "Page 1";
case 1:
return "Page 2";
case 2:
return "Page 3";
}
return null;
}