如何在Toolbar新的appcompat v7 21上设置NAVIGATION_MODE_LIST

12

现在,与ActionBar类中导航模式相关的所有方法(例如setNavigationMode()...)均已弃用。

文档解释如下:

Action bar navigation modes are deprecated and not supported by inline toolbar action bars. Consider using other common navigation patterns instead.

在我的当前应用程序中,ActionBar 上有一个旋转器。如何将 NAVIGATION_MODE_LIST 应用于新版本 appcompat v7 21 中的新小部件 Toolbar。


提前致谢。

2个回答

17

在API 21中,方法setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)已经弃用

使用工具栏来处理下拉菜单(Spinner)是最好的方法,像这样:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_actionbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary">

    <Spinner
            android:id="@+id/spinner_toolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

</android.support.v7.widget.Toolbar>

您可以在 Google IO 2014 中找到一个示例。


1
你能告诉我如何在工具栏上设置NAVIGATION_MODE_TAB的解决方案吗? - Huy Duong Tu
1
请使用此处提供的SlidingTabsBasic:http://developer.android.com/samples/SlidingTabsBasic/index.html - Gabriele Mariotti

5
像往常一样,Gabriele是正确的,所以你的代码将如下所示:
所以它看起来会像这样:
    private ActionBar actionBar;
    private Toolbar toolbar;
    private Spinner spinner;
    private List<String> mNavigationItems;
    private ArrayAdapter<CharSequence> mArrayAdapter;
    /***
     * Boolean to know which version is running
     */
    private boolean postICS,postLollipop;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nav_list);//find the toolbar
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        postLollipop =getResources().getBoolean(R.bool.postLollipop);
        if(postLollipop){
            toolbar.setElevation(15);
        }
        //define the toolbar as the ActionBar
        setSupportActionBar(toolbar);
        actionBar=getSupportActionBar();
        //now manage the spinner
        mNavigationItems=new ArrayList<String>();
        mNavigationItems.add("navigation 1");
        mNavigationItems.add("nav 2");
        mNavigationItems.add("navigation 3");
        spinner= (Spinner) findViewById(R.id.action_bar_spinner);
        mArrayAdapter = new ArrayAdapter(this, R.layout.actionbar_spinner_dropdown_item, mNavigationItems);
        mArrayAdapter.setDropDownViewResource(R.layout.actionbar_spinner_dropdown_item);
        spinner.setAdapter(mArrayAdapter);
    }

请勿使用spinnerAdapter(因为您无法使用AppTheme管理其样式)。
如果要使用Tab(NavigationMode.Tabs),现在应使用Design库(在此处解释:http://android-developers.blogspot.fr/2015/05/android-design-support-library.html?m=1)and),请复制并粘贴以下内容:
“选项卡 在应用程序中通过选项卡在不同视图之间切换并非材料设计的新概念,无论作为顶级导航模式还是用于组织应用程序中不同内容的不同分组(例如,不同类型的音乐)。 设计库的TabLayout实现了固定标签和可滚动标签,其中视图的宽度在所有标签之间平均分配,以及不统一大小且可以水平滚动的标签。选项卡可以以编程方式添加: TabLayout tabLayout =...; tabLayout.addTab(tabLayout.newTab().setText(“ Tab 1”)); 然而,如果您正在使用ViewPager进行选项卡之间的水平分页,则可以直接从PagerAdapter的getPageTitle()创建选项卡,然后使用setupWithViewPager()将两者连接在一起。这可以确保选项卡选择事件更新ViewPager,并且页面更改会更新所选选项卡。”

1
我不得不使用R.layout.support_simple_spinner_dropdown_item而不是R.layout.actionbar_spinner_dropdown_item,否则对我有用。 - Mick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接