How to add line divider for menu item Android
Make sure to call MenuCompat.setGroupDividerEnabled(menu, true);
when you inflate your menu, otherwise groups will not be separated by divider!
Example:
@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_activity_main, menu); MenuCompat.setGroupDividerEnabled(menu, true); return true;}
And make sure to have different groups in your menu xml, e.g.:
<menu> <group android:id="@+id/sorting" > <item android:id="@+id/action_sorting_new_old" android:title="@string/action_sorting_new_old"/> <item android:id="@+id/action_sorting_a_z" android:title="@string/action_sorting_a_z"/> </group> <group android:id="@+id/settings"> <item android:id="@+id/action_settings" android:title="@string/action_settings"/> </group> </menu>
All you need to do is define a group with an unique ID, I have checked the implementation if group has different id's it will create a divider.
Example menu, creating the separator:
<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"><group android:id="@+id/grp1"> <item android:id="@+id/navigation_item_1" android:checked="true" android:icon="@drawable/ic_home" android:title="@string/navigation_item_1" /></group><group android:id="@+id/grp2"> <item android:id="@+id/navigation_item_2" android:icon="@drawable/ic_home" android:title="@string/navigation_item_2" /></group>
hope this helps
UPDATE
for menu item may be you can use this
<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"> <item android:id="@+id/action_cart" android:title="cart" android:actionLayout="@layout/cart_update_count" android:icon="@drawable/shape_notification" app:showAsAction="always"/></menu>
and actionLayout file will be
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <View android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/divider"/> <TextView android:id="@android:id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:gravity="center_vertical" android:textAppearance="?attr/textAppearanceListItemSmall"/></LinearLayout>
Old question, but the above answers didn't work for me (and I object to adding "groups" for single items). What did work was adding a style element as follows:
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar"> <!-- .Light.DarkActionBar"> --> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">#17161B</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>//<-add this </style>
that references
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown"> <item name="android:divider">#dddddd</item> <item name="android:dividerHeight">1dp</item> </style>
in the same res/values/styles.xml file. Hope it helps!