Android L中不推荐使用操作栏导航模式

看一下Android“L”预览的API差异报告,我看到ActionBar类中的所有与导航模式相关的方法(如setNavigationMode()addTab()selectTab() ,&c)。 现在已被弃用。

文档解释:

内置工具栏操作栏不支持操作栏导航模式。 考虑使用其他常见的导航模式。

什么是假定的替代?

另外,“内联工具栏动作栏”是一个新的概念吗? 我以前从来没有听说过。

新的Androiddevise支持库添加了TabLayout ,提供了与标签的材料devise准则相匹配的标签实现。 本video介绍了如何实现Tabs和ViewPager完整演练

现在不推荐使用: PagerTabStrip是支持库的一部分(并且已经有一段时间了),并作为直接replace。 如果您更喜欢较新的Google Play样式标签,则可以使用PagerSlidingTabStrip库或修改Google提供的示例SlidingTabsBasic或SlidingTabsColors,如本Dev Devvideo中所述 。

现在,Android 5.0文档可用,我们有工具栏小部件的官方文档 :

用于应用程序内容的标准工具栏。

工具栏是在应用程序布局中使用的动作条的泛化。 虽然操作栏传统上是由框架控制的Activity的不透明窗口装饰的一部分,但工具栏可以放置在视图层次结构中的任意任意级别的嵌套上

Toolbar小部件也可以用来replace操作栏:

应用程序可以select使用setActionBar()方法将工具栏指定为Activity的操作栏。

操作栏中标签的弃用很可能是由于这个原因,因为工具栏本身不能包含标签。

另外,它可以通过appcompat库在之前的Android版本中使用。 有关更多信息,请参阅Chris Banes的这篇文章 。 摘录:

Android 5.0引入了一个新的工具栏小部件。 这是ActionBar模式的一个泛化,但给你更多的控制和使用它的灵活性。 工具栏就像任何其他视图一样,使您可以更轻松地与其他视图交互,生成animation,对滚动事件作出反应。

看起来他们添加了一个名为android.widget.Toolbar的新类,它扩展了ViewGroup 。 他们还在Activity添加了一个新的方法setActionBar(Toolbar) 。 我还没有testing,但它看起来像你可以将各种TabWidgetsSpinners或自定义视图包装到一个Toolbar并将其用作您的操作栏。

新的Toolbar不能用于多行对象的膨胀,所以不可能添加Tabs到它。
如果你想像TabWidget一样使用Toolbar你可以插入一些Tab对象,但只能使用旧的Holo风格。

这里有一个自定义库,它使用v7 ToolbarTabWidget和新的Material Designanimation,但是它使用旧的ActionBar Tabs的相同方法,因此您可以将ViewPager附加到它。

为了replace已弃用的ActionBar,我将ActionBartypes的variablestypes更改为PagerTabStrip,按照注释中的旧代码:

 // ActionBar bigActionBar; PagerTabStrip bigActionBar; 

〜actionBar的.selectTab(tabindex)的“replace”是使用我的关联的ViewPager的.setCurrentItem(int)方法,就像这样(注释中的旧代码):

 /* ActionBar.Tab eventTab = bigActionBar.getTabAt(2); bigActionBar.selectTab(eventTab); */ mViewPager.setCurrentItem(2); 

希望这是有帮助的。

我有同样的问题,这个解决scheme很适合我:

在包含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; } 

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); } } 

我发现这些教程很有帮助,同时将支持滑动标签的操作栏(现在称为“工具栏” – argh)与Material Design结合在一起:

https://www.youtube.com/watch?v=Fl0xMuo10yA

http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html

你必须综合这些资源,以适应你的特定情况。 例如,您可能不希望手动创build与exoguru.com教程相同样式的选项卡。

那么对我来说,通过使用工具栏v7小部件appcompat处理不推荐的导航工具栏。

  setSupportActionBar(toolbar); getSupportActionBar().setSubtitle("Feed Detail"); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //goToWhere } });