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

6
初始视图 点击分享图标后,弹出窗口覆盖了工具栏内容 在弹出窗口中点击“查看全部”选项,它会在工具栏下方完美地显示

我已经为工具栏添加了shareActionProvider,我的问题是,一旦我点击分享图标,弹出菜单将覆盖工具栏内容,但是当我在弹出菜单中列出的查看全部选项下点击时,弹出菜单将完美地在工具栏下方安置。

我的要求是,一旦我点击分享图标,我的弹出菜单应该在工具栏下方填充,而不是在选择查看全部选项之后。

menu.xml

<item
    android:id="@+id/menu_item_share"
    app:showAsAction="always"
    android:title="Share"
    android:icon="@drawable/abc_ic_menu_share_mtrl_alpha"/>

Java 代码

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuItem item = menu.findItem(R.id.menu_item_share);

    mShareActionProvider = new ShareActionProvider(getActivity()) {
        @Override
        public View onCreateActionView() {
            return null;
        }
    };

    MenuItemCompat.setActionProvider(item, mShareActionProvider);

    if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(createShareIntent());
    }
}

style.xml

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="actionOverflowMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
    <item name="android:popupBackground">@color/colorPrimary</item>

    <!-- 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>
1个回答

12

根据Material Design规范(见菜单部分):

菜单是一张临时的纸,它总是重叠在应用程序栏上,而不是作为应用程序栏的扩展。

菜单覆盖应用程序栏

因此您所看到的是正确的菜单材料设计。


要在主样式中更改它,请使用<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>

对于Lollipop风格,必须在values-v21中设置样式。


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