Android中具有溢出菜单的自定义按钮栏

时间:2014-10-26 16:04:57

标签: android menu

在我的应用中,我想在LinearLayout中展示一些扩展整个屏幕宽度的按钮。根据屏幕尺寸和/或方向,我想在某些OverflowMenu中隐藏那些不适合行的按钮,类似于ActionBar的行为。如果可能,我想在menu resource file中使用ifRoom|always属性描述按钮。

我考虑过从最新的Toolbar库中显示AppCompat,但其中包含太多我不需要的元素,也不知道如何关闭。

是否有一些图书馆或简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:5)

这是一个做你想做的事的例子。确保您的ActionMenuView XML项目的高度和宽度为wrap_content,然后是右侧的重力。将它包围在LinearLayout中,它采用整个宽度并提供背景颜色。

使用此代码初始化ActionMenuView(显然您需要更改按钮回调)

        ActionMenuView actionMenuView = (ActionMenuView) findViewById(R.id.editBar);

        final Context context = this;
        MenuBuilder menuBuilder = new MenuBuilder(context);
        menuBuilder.setCallback(new MenuBuilder.Callback() {
            @Override
            public boolean onMenuItemSelected(MenuBuilder menuBuilder, MenuItem menuItem) {
                return onOptionsItemSelected(menuItem);
            }

            @Override
            public void onMenuModeChange(MenuBuilder menuBuilder) {

            }
        });

        // setup a actionMenuPresenter which will use up as much space as it can, even with width=wrap_content
        ActionMenuPresenter presenter = new ActionMenuPresenter(context);
        presenter.setReserveOverflow(true);
        presenter.setWidthLimit(getResources().getDisplayMetrics().widthPixels, true);
        presenter.setItemLimit(Integer.MAX_VALUE);

        // open a menu xml into the menubuilder
        getMenuInflater().inflate(R.menu.editbar, menuBuilder);

        // runs presenter.initformenu(mMenu) too, setting up presenter's mmenu ref...  this must be before setmenuview
        menuBuilder.addMenuPresenter(presenter, this);

        // runs menuview.initialize too, so menuview.mmenu = mpresenter.mmenu
        actionMenuView.setPresenter(presenter);

        presenter.updateMenuView(true);

为了它的价值,我必须阅读支持库源代码8小时才能使其工作。文档很垃圾。

答案 1 :(得分:4)

ActionMenuViewToolbar的一部分,它专门控制工具栏的操作和溢出部分。在您的情况下,您可以单独使用ActionMenuView来实现工具栏的操作/溢出部分:

  1. ActionMenuView添加到XML布局中的适当位置
  2. 检索MenuInflater(最简单的方法是通过活动的getMenuInflater()方法
  3. 致电menuInflater.inflate(R.menu.your_menu, actionMenuView.getMenu())将您的菜单夸大为ActionMenuView
相关问题