ListView Pop-Up Context Menu broken in Android 7 (API 24)

Issue

ListView context menu pop-up doesn't work properly in Android 7.0 and 7.1 Nougat (API 24 and API 25).

Instead of the full menu appearing in the middle of the screen, it now appears collapsed to a single item and either at the very top or at the very bottom of the screen.

Here is the expected behaviour:

Here is how the context menu looks in Android 7.1.1:

The app uses com.android.support:appcompat-v7 library and Theme.Holo.Light theme.

Resolution

To resolve the issue I had to modify app theme by enabling overlapAnchor in contextPopupMenuStyle. Since contextPopupMenuStyle requires API 24 this cannot be done direly in your main res/values/styles.xml file. Instead, create res/values-v24/styles.xml file which will only apply to API 24 and higher.

Inside the file add following code:

 
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light">
        <item name="android:contextPopupMenuStyle">@style/myContextPopupMenuStyle</item>
        <!-- your other styles used in AppTheme --> 
    </style>
    <style name="myContextPopupMenuStyle" parent="@android:style/Widget.Holo.Light.PopupMenu">
        <item name="android:overlapAnchor">true</item>
    </style>
</resources>
 

You will have to modify above code to replicate your other styles used in the main AppTheme. Or use inheritance so you don't have to duplicate the code.

Result:

Android Studio 2.2.3
February 2017

 



Newsletter

Subscribe to receive occasional updates on new posts.
Your email will not be used for any other purpose and you can unsubscribe at any time.
Please wait