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,但它看起来像你可以将各种TabWidgets
, Spinners
或自定义视图包装到一个Toolbar
并将其用作您的操作栏。
新的Toolbar
不能用于多行对象的膨胀,所以不可能添加Tabs到它。
如果你想像TabWidget
一样使用Toolbar
你可以插入一些Tab对象,但只能使用旧的Holo风格。
这里有一个自定义库,它使用v7 Toolbar
如TabWidget
和新的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
你必须综合这些资源,以适应你的特定情况。 例如,您可能不希望手动创build与exoguru.com教程相同样式的选项卡。
那么对我来说,通过使用工具栏v7小部件appcompat处理不推荐的导航工具栏。
setSupportActionBar(toolbar); getSupportActionBar().setSubtitle("Feed Detail"); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //goToWhere } });