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

时间:2014-06-29 04:39:51

标签: android android-actionbar android-navigation android-5.0-lollipop

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

文档说明:

  

不推荐使用操作栏导航模式,内联不支持   工具栏动作栏。考虑使用其他常见的导航模式   代替。

假设的替代品是什么?

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

10 个答案:

答案 0 :(得分:178)

Android Design Support Library添加TabLayout,提供与material design guidelines for tabs匹配的标签实施。有关如何实施标签和ViewPager的完整演练,请参阅this video

现已弃用: PagerTabStrip是支持库的一部分(已有一段时间了),可作为直接替代品。如果您更喜欢较新的Google Play风格标签,则可以使用PagerSlidingTabStrip library或修改Google提供的示例SlidingTabsBasicSlidingTabsColors,如Dev Bytes video中所述。

答案 1 :(得分:20)

既然Android 5.0文档可用,我们就有了official documentation for the Toolbar widget

  

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

     

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

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

  

应用程序可以选择将工具栏指定为操作栏   使用setActionBar()方法的活动。

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

此外,它可通过appcompat库用于之前的Android版本。有关详细信息,请参阅this post by Chris Banes。摘录:

  

Android 5.0引入了一个新的工具栏小部件。这是一种概括   ActionBar模式,但为您提供更多更多控制权   使用它的灵活性。工具栏就是您的层次结构中的视图   任何其他,使其更容易与其他视图交错,   动画,对滚动事件作出反应。

答案 2 :(得分:13)

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

答案 3 :(得分:4)

Toolbar不能用于对多个线对象进行充气,因此无法为其添加标签。
如果你想使用像Toolbar这样的TabWidget,你可以插入一些标签对象,但只能使用旧的Holo风格。

Here有一个自定义库,它使用v7 Toolbar,例如TabWidget和新的Material Design动画,但它使用旧ActionBar Tabs中的相同方法,所以您可以将ViewPager附加到它。

答案 4 :(得分:2)

替换'对于已弃用的ActionBar,我将ActionBar类型变量的类型更改为PagerTabStrip,如(注释中的旧代码)所示:

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

A'替代' for~actionBar的.selectTab(tabindex)是使用我关联的ViewPager的.setCurrentItem(int)方法,就像这样(评论中的旧代码):

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

希望这有用。

答案 5 :(得分: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;
}

答案 6 :(得分: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);
    }
}

答案 7 :(得分:0)

我发现这些教程很有帮助,同时整理了一个动作栏(现在是&#39;工具栏&#39; - 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

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

答案 8 :(得分:0)

我可以使用工具栏v7小部件appcompat处理不推荐使用的导航工具栏。

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

答案 9 :(得分: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/