如何在工具栏上设置NAVIGATION_MODE_LIST new appcompat v7 21

Huy*_* Tu 12 android android-appcompat android-notifications android-actionbar material-design

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

文档说明:

Action bar navigation modes are deprecated and not supported by inline toolbar action bars. Consider using other common navigation patterns instead.
Run Code Online (Sandbox Code Playgroud)

在我目前的应用程序中,ActionBar上有一个微调器.如何NAVIGATION_MODE_LIST在新版本appcompat v7 21中应用新小部件工具栏.
提前感谢.

Gab*_*tti 17

与API 21中的方法setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)弃用.

使用微调器的最佳方法是使用这样的工具栏:

<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>
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*2ee 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);
    }
Run Code Online (Sandbox Code Playgroud)

并注意不要使用spinnerAdapter(因为您将无法使用AppTheme管理其样式).

如果你想使用Tab(NavigationMode.Tabs),你现在应该使用设计库(在这里解释:http://android-developers.blogspot.fr/2015/05/android-design-support-library.html?m = 1)并在下面复制粘贴"

选项卡通过选项卡在应用程序中的不同视图之间切换不是材料设计的新概念,它们在家中作为顶级导航模式或在应用程序中组织不同的内容分组(例如,不同类型的音乐).

设计库的TabLayout实现了两个固定选项卡,其中视图的宽度在所有选项卡之间平均分配,以及可滚动选项卡,其中选项卡不是统一大小并且可以水平滚动.标签可以通过编程方式添加:

TabLayout tabLayout = ...; tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 但是,如果您使用ViewPager在选项卡之间进行水平分页,则可以直接从PagerAdapter的getPageTitle()创建选项卡,然后使用setupWithViewPager()将两者连接在一起.这可确保选项卡选择事件更新ViewPager,页面更改将更新选定的选项卡.

"