为什么我的溢出下拉菜单位于操作栏的顶部?

eth*_*hio 8 java android android-actionbar

操作栏顶部的下拉列表

默认情况下它不应该在操作栏下面吗?那么我做错了什么?

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

RES /菜单/ main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.test.MainActivity" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

Nik*_*ski 13

这是您正在使用的AppCompat主题的默认行为.根据材料设计指南,预计溢出菜单会出现在它的锚点ActionBar之上.

如果通过设置主题overlapAnchor,可以强制它显示在操作栏下方false

   <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow" >
         <item name="overlapAnchor">false</item>
         <item name="dropDownVerticalOffset">?attr/actionBarSize</item>
    </style>
Run Code Online (Sandbox Code Playgroud)


小智 12

最后这对我有用:

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light" />

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
    </style>

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

        <!-- Required for Lollipop. -->
        <item name="android:overlapAnchor">false</item>
    </style>

</resources>
Run Code Online (Sandbox Code Playgroud)

资料来源:https://stackoverflow.com/a/27134045/3586815

感谢Nikola Despotoski的暗示.


Ale*_*ood 7

根据Material Design规范,溢出菜单应显示在操作栏的顶部:

菜单是一张临时的纸张,总是与应用栏重叠,而不是作为应用栏的扩展.

在此输入图像描述

这是Android Lollipop应用程序以及使用AppCompat v7支持库的任何应用程序的默认行为.