2014-11-17 3 views
8

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; 
} 

разреша/меню/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> 
+0

У меня такая же проблема со свежим установленным и обновленным SDK на Windows 7 (с новым и чистым тестовым проектом Hello World). Я не могу понять. На моей Linux-машине это работает, но этот SDK немного старше. Надеюсь, кто-то может помочь! – Tuksn

+0

С дизайном материала всплывающее меню всегда располагается поверх «ActionBar». Просто взгляните на приложения Google, которые уже используют Material Design. –

ответ

7

Согласно Material Design specifications, меню переполнения должно отображаться на верхней панели действий:

меню является временным листом бумаги, которая всегда перекрывает панель приложений, а не ведет себя как расширение панели приложений.

enter image description here

Это поведение по умолчанию для приложений Android Lollipop, а также любые приложения, которые используют AppCompat v7 библиотеку поддержки.

1

Это новый по умолчанию вариант Material Design. Появятся всплывающие меню, исходящие от Button, которые открыли их.

Это делается для увеличения визуального соединения между Button и всплывающим меню. Просто взгляните на приложения Google, которые уже используют Material Design, там всплывающие меню действуют одинаково.

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> 
+0

Я не знал, что вы можете заставить меню под «ActionBar», это очень интересно. Но следует упомянуть, что, как правило, плохой идеей является отклонение от рекомендаций. –

+0

Я уже упоминал об этом, снова прочитал мой ответ, что он будет перекрываться. –

+0

Не работает для меня. Я на 'API уровне 21'. 'dropDownVerticalOffset' не найден. Поэтому я использовал 'android: dropDownVerticalOffset'. Но все равно не работает. – TechSpellBound

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

Спасибо Николау Деспотоски за подсказку.

+0

Спасибо за полный ответ, в отличие от других ответов в вопросе! – TechSpellBound

Смежные вопросы