web-dev-qa-db-fra.com

Comment afficher le menu contextuel exact en dessous de la barre d’action?

Je travaille sur le menu contextuel dans la barre d'action. Mais je suis coincé pour afficher exactement ci-dessous de la barre d'action (cut-to-cut). Je suis en train de mettre deux instantanés.

Ma capture d'écran de problème:

 enter image description here

Je veux le menu contextuel exact ci-dessous de la barre d'action comme ci-dessous capture d'écran

Capture d'écran de correction:

 enter image description here

Mon extrait de code:

<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=".MainActivity">
<item Android:id="@+id/action_filter"
    Android:icon="@drawable/ic_filter_white_18dp"
    Android:title="@string/action_filter"
    app:showAsAction="ifRoom" />
<item Android:id="@+id/action_label"
    Android:icon="@drawable/ic_add_circle_outline_white_18dp"
    Android:title="@string/action_label"
    app:showAsAction="ifRoom" />
<item Android:id="@+id/action_settings"
    Android:title="@string/action_settings"
    app:showAsAction="never" />

14
Vasant

Définissez le thème du manifeste Android sur 

Android:theme="@Android:style/Theme.Holo.Light"
3
Naheel

Lorsque vous travaillez avec AppCompat Theme, le code ci-dessous vous aide. KitKat ou Lollipop 

Faites votre style.xml comme ci-dessous

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/black</item>
    <item name="Android:background">@Android:color/transparent</item>
    <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
</style>


<style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
    <item name="Android:windowDisablePreview">true</item>
    <item name="overlapAnchor">false</item>
    <item name="Android:dropDownVerticalOffset">5.0dp</item>
    <!--<item name="Android:popupBackground">#FFF</item>-->
</style>
17
Ness Tyagi

Selon mon code, c'est la solution exacte en changeant de style.

<style name="AppTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionBarStyle">@style/MyActionBar</item>
    <item name="Android:actionMenuTextColor">@color/text_white</item>
    <item name="Android:popupMenuStyle">@style/PopupMenu.Example</item>
    <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
</style>

<style name="PopupMenu.Example" parent="@Android:style/Widget.Holo.Light.ListPopupWindow">
    <item name="Android:popupBackground">#efefef</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>
    <item name="Android:dropDownVerticalOffset">4.0dip</item>

</style>
11
Vasant

Si vous souhaitez continuer à utiliser le thème ActionBar et AppCompat plutôt que le thème ToolBar ou Holo, vous pouvez utiliser le code suivant:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="actionOverflowMenuStyle">@style/MyOverflowMenu</item>
</style>

<style name="MyOverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
    <item name="overlapAnchor">false</item>
    <item name="Android:overlapAnchor" tools:ignore="NewApi">false</item>
    <item name="Android:dropDownVerticalOffset">4.0dip</item>
</style>

Cela a fonctionné pour moi.

8
Sanket B

Vous pouvez y parvenir par la propriété de style overlapAnchor = false

 <style name="toolBarStyle" parent="AppTheme">
        <item name="popupTheme">@style/toolbarPopup</item>
    </style>

    <style name="toolbarPopup" parent="@Android:style/Widget.Holo.ListPopupWindow">  <!--ThemeOverlay.AppCompat.Light-->
        <item name="Android:popupBackground">#AF0000</item>
        <item name="overlapAnchor">false</item>
        <item name="Android:dropDownVerticalOffset">5dp</item>

    </style>

et définir ce style dans AppTheme comme ci-dessous

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--   to avoid overlay of popup window in toolbar -->
        <item name="actionOverflowMenuStyle">@style/toolBarStyle</item>
</style>
1
Ram Prakash Bhat