'Android. styling of ListPopupMenu

I have inherited ListPopupMenu I used for show popup for items in ListView widget.

I use this code for creation and displaying my popup:

CADropDownPopupList popupMenu = new CADropDownPopupList(getActivity());
popupMenu.setAnchorView(view);
...
popupMenu.show();

I have styled listPopupMenu attribute in styles using this code:

 <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
...
        <item name="android:dialogTheme">@style/NoTitleAlertDialogTheme</item>
        <item name="listPopupWindowStyle">@style/PopupMenu</item>
        <item name="android:listPopupWindowStyle">@style/PopupMenu</item>
...
    </style>

<style name="PopupMenu" parent="Widget.AppCompat.ListPopupWindow">
        <item name="android:layout_marginLeft">16dp</item>
        <item name="android:layout_marginRight">16dp</item>
        <item name="android:paddingLeft">16dp</item>
        <item name="android:paddingRight">16dp</item>
        <item name="android:textSize">40sp</item>
        <item name="android:popupBackground">@drawable/popup_background</item>
    </style>

But no one style item maps to my popup. What did I do wrong?



Solution 1:[1]

Change your theme

Use PipupMenu insted of ListPopupWindow

<style name="PopupMenu.Example" parent="@style/Widget.AppCompat.Light.PopupMenu">   
        <item name="android:popupBackground">@drawable/menu_dropdown_panel_example</item>   
    </style>

Because ListPopupWindow style not available check issue : http://code.google.com/p/android/issues/detail?id=58023

Solution 2:[2]

I too struggled to get styles working, but found that you can manually set properties directly on the ListPopupWindow after creating it.

val popup = ListPopupWindow(context, null, R.attr.listPopupWindowStyle).apply {
    setBackgroundDrawable(ContextCompat(context, R.drawable.bg_popup_menu))
    // ... etc ...
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Tom