I want to add the title of the group of items of the submenu. I don't want to use the submenus which are hidden and open on its click, I want to implement a title of the group of menu items. So now my menu looks like this:
But I want to implement it like this:
Now my XML seems like this, but it's using a nested submenus:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<group
android:id="#+id/group_1"
android:checkableBehavior="single"
>
<item
android:id="#+id/apps_sort_title"
android:title="#string/apps_sort_title"
app:showAsAction="ifRoom"
/>
<item
android:id="#+id/apps_sort_date"
android:title="#string/apps_sort_date"
app:showAsAction="ifRoom"
/>
<item
android:id="#+id/apps_sort_size"
android:title="#string/apps_sort_size"
app:showAsAction="ifRoom"
/>
</group>
<item android:title="#string/title_order">
<menu>
<group
android:id="#+id/group_2"
android:checkableBehavior="single"
>
<item
android:id="#+id/apps_sort_asc"
android:title="#string/sort_asc"
app:showAsAction="ifRoom"
/>
<item
android:id="#+id/apps_sort_desc"
android:title="#string/sort_desc"
app:showAsAction="ifRoom"
/>
</group>
</menu>
</item>
</menu>
Thanks in advance!
Set the tittle on group, you have to implement your menu XML like this.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="#+id/gp1"
android:checkableBehavior="single"
android:visible="true">
<item android:title="Group Title">
<menu>
<item
android:id="#+id/group_item_one"
android:title="Item one"/>
<item
android:id="#+id/group_item_two"
android:title="Item two"/>
<item
android:id="#+id/group_item_three"
android:title="Item three"/>
</menu>
</item>
</group>
<group
android:id="#+id/gp2"
android:checkableBehavior="single">
<item
android:id="#+id/group_two_item_one"
android:title="Item one"/>
</group>
Finally found the solution I needed to use the setGroupVisible() method of the menu object passed into the onPrepareOptionsMenu() method.
menu.setGroupVisible(R.id.gp1, false);
Happy coding!!
I have the following items to display on the ActionBar. They are :- Share and Settings.
Under Settings I need to show a drop down menu with two more options.
Here is my code:-
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="#+id/action_share"
android:icon="#drawable/share"
android:title="Share"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="#+id/action_settings"
android:title="Settings"
android:showAsAction="never" />
</menu>
How can I go ahead wit it?
Try this code for subMenu using XML
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/action_share"
android:icon="#drawable/share"
android:title="Share"
android:showAsAction="ifRoom" />
<item android:id="#+id/action_settings"
android:icon="#drawable/setting"
android:title="#string/settings"
android:showAsAction="ifRoom|withText">
<menu>
<item android:id="#+id/option1"
android:icon="#drawable/yourIcon"
android:title="SubMenu1" />
<item android:id="#+id/option2"
android:icon="#drawable/yourIcon"
android:title="SubMenu2" />
</menu>
</item>
</menu>
JAVA code for Activity
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar, menu);
return true;
}
Until now my Activity extended FragmentActivity and uses the ActionBarCompat. If i try to run my app on a smartphone with API level 10 (2.3.3) (or less i think) the ActionBar doesn't appear. To try to solve this problem i extended ActionBarActivity, BUT now i can't see the
items on it. I think i need to change this method:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
but i don't understand how.
This is the main:
<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.loris.stefano.easyroutes.MainActivity">
<item
android:id="#+id/action_settings"
android:title="#string/action_settings"
app:showAsAction="never"/>
<item
android:id="#+id/option_group_2"
android:icon="#drawable/layers"
android:showAsAction="always">
<menu>
<item
android:id="#+id/map_tipe_normal"
android:title="#string/map_type_normal"/>
<item
android:id="#+id/map_type_terrain"
android:title="#string/map_type_terrain"/>
<item
android:id="#+id/map_type_hybrid"
android:title="#string/map_type_hybrid"/>
<item
android:id="#+id/map_type_satellite"
android:title="#string/map_type_satellite"/>
<item
android:id="#+id/map_type_none"
android:title="#string/map_type_none"/>
</menu>
</item>
<item
android:id="#+id/draw_path_menu"
android:icon="#drawable/draw"
android:showAsAction="always">
<menu>
<item
android:id="#+id/merge_markers"
android:title="Merge Markers"/>
<item
android:id="#+id/draw_path"
android:title="Draw Path"/>
</menu>
</item>
<item
android:id="#+id/track_options"
android:icon="#drawable/import_map"
android:showAsAction="always">
<menu>
<item
android:id="#+id/import_track"
android:title="Import Track"/>
<item
android:id="#+id/export_track"
android:title="Export Track"/>
<item
android:id="#+id/download_track"
android:title="Download Track"/>
</menu>
</item>
Is there a way in which we can display icon along with text in android over flow menu of action bar. My code is below :
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="#+id/menu_share"
android:title="share"
android:showAsAction="always"
android:actionProviderClass="android.widget.ShareActionProvider" />
<item
android:id="#+id/action_search"
android:showAsAction="always|collapseActionView"
android:icon="#drawable/ic_menu_search"
android:title="Search"
android:actionViewClass="android.widget.SearchView">
<item
android:id="#+id/item_refresh"
android:icon="#drawable/ic_menu_refresh"
android:title="Refresh"
android:showAsAction="ifRoom|withText"
/>
<item
android:id="#+id/item_save"
android:icon="#drawable/ic_menu_save"
android:title="Save"
android:showAsAction="ifRoom|withText"
></item>
</menu>
Can anyone help me is sorting out this issue. I need to display both icon along with text in overflow that appears on the top right of action bar.
Thanks in advance
As far as I understand, Action Overflow just displays the text (android:title). I've been looking through some apps, and none of them have "icon+text" on items within the Action Overflow.
AFAIK, this is not possible. What you can do is use a ListPopupWindow to accompish this. I had to use a custom bar instead of ActionBar, since it doesn't seem very customizable and I have used PopupMenu but I haven't tried to put icons in yet. But ListPopupWindow should allow you too. You may have to use a custom bar. Possibly attach it to the oveflow button somehow but I'm not sure that is possible
Note that ListPopupWindow needs API >=11
Try creating customized overflow menu:
<item
android:id="#+id/action_overflow"
android:icon="#drawable/overflow"
android:showAsAction="always">
<menu>
<item android:id="#+id/menu_share"
android:title="share"
android:showAsAction="always"
android:actionProviderClass="android.widget.ShareActionProvider" />
<item
android:id="#+id/action_search"
android:showAsAction="always|collapseActionView"
android:icon="#drawable/ic_menu_search"
android:title="Search"
android:actionViewClass="android.widget.SearchView">
<item
android:id="#+id/item_refresh"
android:icon="#drawable/ic_menu_refresh"
android:title="Refresh"
android:showAsAction="ifRoom|withText"
/>
<item
android:id="#+id/item_save"
android:icon="#drawable/ic_menu_save"
android:title="Save"
android:showAsAction="ifRoom|withText"
></item>
</menu>
</item>
you Need to add tools:context="your class" to menu tag
<?xml version="1.0" encoding="utf-8"?>
<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=".activities.BaseActivity">
<item
android:id="#+id/action_notification1"
android:icon="#drawable/three"
android:title="action_notification"
app:showAsAction="always">
<menu>
<item
android:id="#+id/profile"
android:icon="#drawable/profile"
android:orderInCategory="100"
android:title="PROFILE" />
<item
android:id="#+id/c"
android:icon="#drawable/correct_tick"
android:orderInCategory="100"
android:title="COMPLETED TRIPS" />
<item
android:id="#+id/app"
android:icon="#drawable/report_issue"
android:orderInCategory="100"
android:title="REPORT ISSUES" />
<item
android:id="#+id/r"
android:icon="#drawable/correct_tick"
android:orderInCategory="100"
android:title="REACHED CENTER" />
<item
android:id="#+id/pdf"
android:icon="#drawable/pdf_image"
android:orderInCategory="100"
android:title="BAG INFO" />
<item
android:id="#+id/l"
android:icon="#drawable/logout"
android:orderInCategory="100"
android:title="LOGOUT" />
</menu>
</item>
</menu>
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menu.getItem(0).getSubMenu().getItem(3).setVisible(false);
menu.getItem(0).getSubMenu().getItem(4).setVisible(true);
return super.onCreateOptionsMenu(menu);
}
you shold write tool:context to menu tag then run you will get icons to your text
I want to differentiate the groups by giving them a title or divider, but I can't find a title option for the group element.
Is there a way to add a title or divider?
<group android:id="#+id/menu_group_sort" >
<item
android:id="#+id/menu_sort_relevance"
android:showAsAction="never"
android:title="#string/sort_relevance"/>
<item
android:id="#+id/menu_sort_rating"
android:showAsAction="never"
android:title="#string/sort_rating"/>
</group>
I use this code for my project, take a look:
<item
android:title="Search Option"
android:id="#+id/menu_search_option"
android:showAsAction="ifRoom|withText">
<menu>
<group>
<item
android:id="#+id/menuSearchFilmEpisode"
android:title="Episode"/>
<item
android:id="#+id/menuSearchActor"
android:title="Actor"/>
<item
android:id="#+id/menuSearchDirector"
android:title="Director"/>
</group>
</menu>
</item>
And the result is that i have a group with text as icon on my action bar. Hope it helps.
Perhaps two years too late, but thought it might be useful for whoever stumbles upon this problem...
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="#+id/group_one">
<item android:title="Group Title">
<menu>
<item
android:id="#+id/group_item_one"
android:title="Item one"/>
<item
android:id="#+id/group_item_two"
android:title="Item two"/>
<item
android:id="#+id/group_item_three"
android:title="Item three"/>
</menu>
</item>
</group>
<group
android:id="#+id/group_two">
<item
android:id="#+id/group_two_item_one"
android:title="Item one"/>
</group>
Although that might not be the best approach, I believe it might help you out.
What about you add extra disabled itens as "titles" inside the groups, also you could create a style for those itens so they might show the color you want.
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group>
<item
android:title="menu1"
android:enabled="false"
android:checkable="false">
</item>
<item
android:title="opt1">
</item>
<item
android:title="opt2">
</item>
<item
android:title="opt3">
</item>
</group>
<group>
<item
android:title="menu2"
android:enabled="false"
android:checkable="false">
</item>
<item
android:title="opt4">
</item>
<item
android:title="opt5">
</item>
</group>
</menu>
You also can try something like that, using java.
#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);
menu.addSubMenu(Menu.NONE, 1, 1, "SubMenu");
menu.add(1, 2, 2, "Item");
menu.add(1, 3, 3, "Item");
menu.addSubMenu(Menu.NONE, Menu.NONE, 4, "SubMenu");
menu.add(4, 5, 5, "Item");
menu.add(4, 6, 6, "Item");
menu.add(4, 7, 7, "Item");
return true;
}
Parameters
groupId
The group identifier that this item should be part of. This can also be used to define groups of items for batch state changes. Normally use NONE if an item should not be in a group.
itemId
Unique item ID. Use NONE if you do not need a unique ID.
order
The order for the item. Use NONE if you do not care about the order. See getOrder().
title
The text to display for the item.
Yet, I believe both should have the same result.
I hope it help you.
As we all know, an item-node can has title, and an item-node can be the child of menu-node, further more a menu-node can be a child of item-node, and a group-node can be a child of a menu-node.
so all we need to do is keep the group inside the hierarchy of rootMenu-itemWithTitle-menu.
like this, is is used as a NavigationView menus:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.MainActivity">`
<item android:title="#string/drawer_group_book">
<menu>
<group android:id="#+id/nav_group_book"
android:checkableBehavior="single">
<item
android:id="#+id/nav_book_in_stock"
android:icon="#drawable/vector_in_stock"
android:title="#string/drawer_menu_in_stock"/>
<item
android:id="#+id/nav_book_wish_list"
android:icon="#drawable/vector_wish"
android:title="#string/drawer_menu_wish_list"/>
<item
android:id="#+id/nav_book_lent_out"
android:icon="#drawable/vector_out"
android:title="#string/drawer_menu_lent_out"/>
<item
android:id="#+id/nav_book_borrowed"
android:icon="#drawable/vector_in"
android:title="#string/drawer_menu_borrowed"/>
</group>
</menu>
</item>
<item android:title="Communicate">
<menu>
<item
android:id="#+id/nav_share"
android:icon="#drawable/ic_menu_share"
android:title="Share"/>
<item
android:id="#+id/nav_send"
android:icon="#drawable/ic_menu_send"
android:title="Send"/>
</menu>
</item>
</menu>
Just give a unique id to each group. It will create a separator automatically.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="#+id/group_items"
android:checkableBehavior="single">
<item
android:id="#+id/nav_profile"
android:icon="#drawable/ic_profile"
android:title="#string/title_profile" />
<item
android:id="#+id/nav_notifications"
android:icon="#drawable/ic_notifcation"
android:title="#string/title_notifications" />
</group>
<group
android:id="#+id/group_settings"
android:checkableBehavior="single">
<item
android:id="#+id/nav_privacy_policy"
android:title="#string/privacy_policy" />
<item
android:id="#+id/nav_about_us"
android:title="#string/nav_about_us" />
</group>
This might be a little late, but for whom it might help, The below menu code adds title to a menu group and below it 2 checkable options to choose from.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="#+id/gp_hour_view"
android:checkableBehavior="single">
<item
android:checkable="false"
android:title="Display">
<menu>
<group
android:id="#+id/gp_hour_sel"
android:checkableBehavior="single">
<item
android:id="#+id/action_pinched_view"
android:checked="true"
android:orderInCategory="201"
android:title="Pinched"
app:showAsAction="never" />
<item
android:id="#+id/action_zoomed_view"
android:orderInCategory="201"
android:title="Zoomed"
app:showAsAction="never" />
</group>
</menu>
</item>
</group>
</menu>
This is my idea:
<menu>
<group>
<item android:title="grouptitle"/>
<item android:title="item1" android:id="#id+/item1"/>
</group>
</menu>
To have a title in each group within your menu, you can create a disabled item that acts as a title. This way it will not be clickable and will have a different color from the elements in your group. Also, in order to make the difference between selectable and non-selectable items more evident, you can add an icon only to the title item of the group.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group
android:id="#+id/group1"
android:checkableBehavior="single">
<item
android:title="Title 1"
android:enabled="false"
android:icon="#drawable/ic_star" />
<item
android:title="#string/menu_home" />
<item
android:title="#string/menu_home" />
<item
android:title="#string/menu_home" />
</group>
<group
android:id="#+id/group2"
android:checkableBehavior="single">
<item
android:title="Title 2"
android:enabled="false"
android:icon="#drawable/ic_star" />
<item
android:title="#string/menu_home" />
<item
android:title="#string/menu_home" />
<item
android:title="#string/menu_home" />
</group>
</menu>