如何将溢出菜单放置在工具栏下方而不是重叠应用栏?

7

我知道这是每种材料指南都有的,但我不喜欢它,我希望它在工具栏下面。请提供一些信息来调整溢出菜单的位置。

2个回答

35
在您的主样式中使用 <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>,其中

<style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
  <!-- Required for pre-Lollipop. -->
   <item name="overlapAnchor">false</item>
   <item name="android:dropDownVerticalOffset">-4.0dip</item>
  <!-- Required for Lollipop. -->
   <item name="android:overlapAnchor">false</item>
   <item name="android:dropDownVerticalOffset">4.0dip</item>
</style>

对于棒棒糖风格,必须放在values-v21中。


1
上面的解决方案对我不起作用。你可以给我提供这个链接的解决方案吗?https://dev59.com/oVsW5IYBdhLWcg3woYni?noredirect=1#comment57223525_34738893 - Vasant

0

使用上述解决方案时,我遇到了一个问题,即菜单项背景是透明的,并且在我点击菜单项之前,它会阻止窗口上的任何操作。对于那些遇到同样问题的人,我建议在菜单项中添加弹出式菜单。例如,我的menu.xml文件中有这个项目:

<item
    android:id="@+id/new_work_report"
    android:icon="@drawable/ic_add_white"
    android:title="@string/action_settings"
    app:showAsAction="ifRoom"/>

然后,在我的OnOptionsItemsSelected方法中(在将菜单填充到活动之后):
@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{
    switch (menuItem.getItemId())
    {
        case android.R.id.home:
            finish();
            break;

        case R.id.new_work_report:
            View itemView = FieldSheetActivity.this.findViewById(R.id.new_work_report);
            PopupMenu popMenu = new PopupMenu(MyActivity.this, itemView);
            popMenu.getMenu().add("Do something");

            popMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
            {

                @Override
                public boolean onMenuItemClick(MenuItem item)
                {
                    // Your desired action

                    return true;
                }
            });
            popMenu.show();
            break;
    }

    return super.onOptionsItemSelected(menuItem);
}

通过这个解决方案,菜单选项总是显示在所点击的菜单项下方。如果您有任何问题,请随时问我!


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