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

时间:2014-11-17 18:33:45

标签: java android android-actionbar

dropdown list on top of 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;
}

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>

4 个答案:

答案 0 :(得分:13)

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

如果通过设置主题overlapAnchorfalse

,您可以强制它显示在操作栏下方
   <style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow" >
         <item name="overlapAnchor">false</item>
         <item name="dropDownVerticalOffset">?attr/actionBarSize</item>
    </style>

答案 1 :(得分: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>

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

感谢Nikola Despotoski的暗示。

答案 2 :(得分:7)

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

  

菜单是一张临时的纸张,总是与应用栏重叠,而不是表现为应用栏的扩展名。

enter image description here

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

答案 3 :(得分:1)

这是Material Design的新默认值。弹出菜单将显示来自打开它们的Button

这样做是为了增加Button和弹出菜单之间的可视连接。只需看看已经使用Material Design的Googles应用程序,弹出菜单就会以同样的方式运行。