【问题标题】:how to set NAVIGATION_MODE_LIST on Toolbar new appcompat v7 21如何在工具栏上设置 NAVIGATION_MODE_LIST 新 appcompat v7 21
【发布时间】:2014-12-24 20:18:36
【问题描述】:

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

文档说明:

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

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

【问题讨论】:

    标签: android android-actionbar android-notifications android-appcompat material-design


    【解决方案1】:

    对于 API 21,方法 setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)deprecated

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

    <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找到一个例子

    【讨论】:

    【解决方案2】:

    像往常一样,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) 你现在应该使用设计库(这里解释: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 和页面更改更新 选择的标签。

    "

    【讨论】:

    • 我不得不使用 R.layout.support_simple_spinner_dropdown_item 而不是 R.layout.actionbar_spinner_dropdown_item,否则对我有用。
    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2014-12-22
    • 2014-12-13
    • 2014-12-14
    • 2014-12-20
    相关资源
    最近更新 更多