204

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

该文档解释说:

内联工具栏操作栏已弃用操作栏导航模式,并且不支持该模式。考虑改用其他常见的导航模式。

什么是假定的替代品?

另外,“内联工具栏操作栏”是一个新概念吗?我想我以前没听说过。

4

10 回答 10

179

新的Android 设计支持库添加了TabLayout,提供了与选项卡的材料设计指南相匹配的选项卡实现。有关如何实现选项卡的完整演练,ViewPager可以在此视频中找到

现在已弃用:PagerTabStrip是支持库的一部分(并且已经存在了一段时间)并用作直接替代品。如果您喜欢较新的 Google Play 样式选项卡,您可以使用PagerSlidingTabStrip 库或修改 Google 提供的示例SlidingTabsBasicSlidingTabsColors,如本Dev Bytes 视频中所述。

于 2014-06-29T05:15:28.980 回答
20

现在 Android 5.0 文档可用,我们有Toolbar 小部件的官方文档

在应用程序内容中使用的标准工具栏。

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

Toolbar部件也可用于替换操作栏:

setActionBar()应用程序可以选择使用该方法将 Toolbar 指定为 Activity 的操作栏。

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

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

Android 5.0 引入了一个新的工具栏小部件。这是 ActionBar 模式的概括,但在使用它时为您提供更多的控制和灵活性。工具栏是您的层次结构中的一个视图,就像任何其他视图一样,可以更轻松地与您的其余视图交错、动画、对滚动事件作出反应。

于 2014-10-18T22:56:17.040 回答
13

似乎他们添加了一个名为android.widget.Toolbarextends的新类ViewGroup。他们setActionBar(Toolbar)还在Activity. 我还没有测试过它,但看起来你可以将各种或自定义视图包装TabWidgetsSpinnersaToolbar中并将其用作你的操作栏。

于 2014-06-29T16:02:13.207 回答
4

newToolbar不能用于对多个 line 对象进行充气,因此无法为其添加 Tabs。
如果您想使用Toolbar类似的,TabWidget您可以向其中插入一些选项卡对象,但只能使用旧的 Holo 样式。

这里有一个自定义库,它使用 v7ToolbarTabWidget新的 Material Design 动画一样,但它使用与旧的相同的方法ActionBar Tabs,因此您可以附加ViewPager到它。

于 2014-10-22T09:47:19.427 回答
3

对于不推荐使用的 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);

希望这会有所帮助。

于 2014-11-16T02:59:50.307 回答
1

我有同样的问题,这个解决方案非常适合我:

在包含 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;
}
于 2014-12-04T15:07:38.293 回答
0

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);
    }
}
于 2014-12-24T05:54:25.600 回答
0

我发现这些教程在组合一个支持 Material Design 滑动选项卡的操作栏(现在是“工具栏” - 啊)时很有帮助:

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

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

您必须综合这些资源以匹配您的特定情况。例如,您可能不想以与 exoguru.com 教程相同的样式手动创建选项卡。

于 2015-04-27T16:24:34.190 回答
0

对我来说,通过使用工具栏 v7 小部件 appcompat 来处理已弃用的导航工具栏。

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });
于 2016-10-11T03:53:22.203 回答
0

我认为当你有三到五个同等重要的屏幕时,一个合适的替代品是 BottomNavigationActivity,它可以用来切换片段。

你会注意到 Android Studio 中存在一个向导,但是要小心,因为 Android Studio 倾向于生成过于复杂的样板代码。

可以在此处找到教程: https ://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

另一个质量教程可以在这里找到 Android Hive: https ://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

于 2018-04-10T00:49:40.200 回答