It may be worth noting that my R.java file disappeared this morning because I used an incorrect menu icon name in this menu XML file. I have since corrected the name and regenerated the R.java file.
What I have found out by debugging:
Any menu item that takes 4 clicks to get to does not fire the onOptionsItemSelected listener in Android.
Can I make these 4-click menuItems fire the onOptionsItemSelected listener? Thanks.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/menu_sticker"
android:showAsAction="always"
android:icon="#drawable/ic_action_add"
android:title="Add Sticker">
<menu>
<item
android:id="#+id/menu_male"
android:showAsAction="always"
android:title="Male">
<menu>
<item
android:id="#+id/menu_add_clothes"
android:showAsAction="always"
android:title="Add Clothes">
<menu>
<item
android:id="#+id/menu_maleHat"
android:showAsAction="always"
android:title="Hat"/>
<item
android:id="#+id/menu_maleTop"
android:showAsAction="always"
android:title="Top"/>
<item
android:id="#+id/menu_malePants"
android:showAsAction="always"
android:title="Pants"/>
</menu>
</item>
<item
android:id="#+id/menuMaleAccessories"
android:showAsAction="always"
android:title="Add Accessories">
</item>
<item
android:id="#+id/menuMaleHair"
android:showAsAction="always"
android:title="Add Hair">
</item>
</menu>
</item>
<item
android:id="#+id/menu_female"
android:showAsAction="always"
android:title="Female">
<menu>
<item
android:id="#+id/menu_add_clothes_female"
android:showAsAction="always"
android:title="Add Clothes">
<menu>
<item
android:id="#+id/menu_femaleHat"
android:showAsAction="always"
android:title="Hat"/>
<item
android:id="#+id/menu_femaleTop"
android:showAsAction="always"
android:title="Top"/>
<item
android:id="#+id/menu_femalePants"
android:showAsAction="always"
android:title="Pants"/>
</menu>
</item>
<item
android:id="#+id/menuFemaleAccessories"
android:showAsAction="always"
android:title="Add Accessories">
</item>
<item
android:id="#+id/menuFemaleHair"
android:showAsAction="always"
android:title="Add Hair">
</item>
</menu>
</item>
</menu>
</item>
<item
android:id="#+id/action_settings"
android:showAsAction="always"
android:title="Sticker Settings"
android:icon="#drawable/ic_action_gear">
<menu>
<item
android:id="#+id/action_save"
android:showAsAction="always"
android:title="#string/action_save"
android:icon="#drawable/ic_action_save">
</item>
<item
android:id="#+id/action_cancel"
android:showAsAction="always"
android:title="Cancel"
android:icon="#drawable/ic_action_cancel">
</item>
<item
android:title="Sticker Settings"
android:id="#+id/action_cancel1"
android:icon="#drawable/ic_action_settings">
<menu>
<group android:checkableBehavior="single"
>
<item android:id="#+id/uniformScale"
android:title="Change Size"
android:checked="true" />
<item android:id="#+id/rotation"
android:title="Rotate"
android:checked="false" />
</group>
</menu>
</item>
</menu>
</item>
</menu>
Activity:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dressing_room, menu);
checkCheckboxes(menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.menu_femaleHat : addClothes(R.id.menu_femaleHat);
Log.d("adding hat", "hat clicked");
break;
case R.id.menu_femalePants: addClothes(R.id.menu_femalePants);
break;
case R.id.menu_femaleTop: addClothes(R.id.menu_femaleTop);
break;
case R.id.menu_maleHat: addClothes(R.id.menu_maleHat);
break;
case R.id.menu_malePants: addClothes(R.id.menu_malePants);
break;
case R.id.menu_maleTop: addClothes(R.id.menu_maleTop);
break;
case R.id.menuMaleHair: addClothes(R.id.menuMaleHair);
break;
case R.id.menuFemaleHair: addClothes(R.id.menuFemaleHair);
break;
case R.id.menuMaleAccessories: addClothes(R.id.menuMaleAccessories);
break;
case R.id.menuFemaleAccessories: addClothes(R.id.menuFemaleAccessories);
break;
case R.id.action_save: saveClicked();// cropImage();
break;
case R.id.action_cancel: goToStartScreen();// cropImage();
break;
case R.id.uniformScale:
changeAnisotropic(item);
break;
case R.id.rotation:
changeRotate(item);
break;
}
return super.onOptionsItemSelected(item);
}
private void changeRotate(MenuItem item){
if (item.isChecked()) {
item.setChecked(false);
photoSorter.setRotate(2);
photoSorter.setAnisotropic(1);
}
else{
item.setChecked(true);
photoSorter.setRotate(1);
photoSorter.setAnisotropic(2);
}
}
private void checkCheckboxes(Menu menu){
MenuItem checkBox1 = (MenuItem) menu.findItem(R.id.uniformScale);
if (checkBox1.isChecked()) {
photoSorter.setRotate(2);
photoSorter.setAnisotropic(1);
}
else{
photoSorter.setRotate(1);
photoSorter.setAnisotropic(2);
}
}
private void changeAnisotropic(MenuItem item){
if (item.isChecked()) {
item.setChecked(false);
photoSorter.setAnisotropic(2);
photoSorter.setRotate(1);
}
else{
item.setChecked(true);
photoSorter.setAnisotropic(1);
photoSorter.setRotate(2);
}
}
Nest your <items> of the second level of <menu> into <group>, for example:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/menu1"/>
<item android:id="#+id/menu2">
<menu>
<group android:id="#+id/group2">
<item android:id="#+id/submenu1" />
<item android:id="#+id/submenu2" />
</group>
</menu>
</item>
</menu>
From the Android documentation on menus:
You can add a submenu to an item in any menu (except a submenu) by
adding a <menu> element as the child of an <item>
Related
I have a Main Activity that controls 3 Fragments. The MainActivity has a searchbar and some filters on the options menu. The problem is that one of the fragments (ResultadosFragment) has its own implementation of OnCreateOptionsMenu(), where it inflates its own menu. What happens is that the options of both - the MainActivity and the Fragment - menus get mixed together in only one option menu.
Here's a screenshot:
MainActivity - OnCreateOptionsMenu()
#Override
public boolean onCreateOptionsMenu(final Menu menu) {
super.onCreateOptionsMenu(menu);
mOptionsMenu = menu;
//Carrega o arquivo de menu.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search_bar, menu);
menu.findItem(R.id.usado).setChecked(true);
menu.findItem(R.id.longplay).setChecked(true);
menu.findItem(R.id.nacional).setChecked(true);
//Pega o Componente.
final SearchView mSearchView = (SearchView) menu.findItem(R.id.search)
.getActionView();
//Define um texto de ajuda:
mSearchView.setQueryHint("Banda - Álbum");
// exemplos de utilização:
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
#Override
public boolean onQueryTextSubmit(String query) {
searchQueryGlobal = query;
realizarPesquisa();
mSearchView.setIconified(true);
mSearchView.clearFocus();
// call your request, do some stuff..
// collapse the action view
if (menu != null) {
(menu.findItem(R.id.search)).collapseActionView();
}
return false;
}
#Override
public boolean onQueryTextChange(String newText) {
Log.i("well", " this worked");
return false;
}
});
return true;
}
menu_search_bar.XML
<?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="com.example.marcelofb.cratediggersguide.MainActivity">
<item
android:id="#+id/search"
android:icon="#android:drawable/ic_menu_search"
android:title="#string/search_title"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom"/>
<!-- <item
android:id="#+id/searchOptions"
android:title="Tools"
android:icon="#android:drawable/ic_menu_manage"
app:showAsAction="always" /> -->
<item android:title="Menu No. 2">
<group android:id="#+id/radioGroupNovoUsado" android:checkableBehavior="single">
<item
android:id="#+id/novo"
android:title="NOVO"
app:showAsAction="never" >
</item>
<item
android:id="#+id/usado"
android:title="USADO"
app:showAsAction="never" />
</group>
</item>
<item android:id="#+id/radioGroupCompactoLPItem"
android:title="Menu No. 2">
<group android:id="#+id/radioGroupCompactoLP" android:checkableBehavior="single">
<item
android:id="#+id/compacto"
android:title="COMPACTO"
app:showAsAction="never" />
<item
android:id="#+id/longplay"
android:title="LP"
app:showAsAction="never" />
</group>
</item>
<item android:id="#+id/radioGroupNacionalImportadoItem"
android:title="Menu No. 2">
<group android:id="#+id/radioGroupNacionalImportado" android:checkableBehavior="single">
<item
android:id="#+id/nacional"
android:title="NACIONAL"
app:showAsAction="never" />
<item
android:id="#+id/importado"
android:title="IMPORTADO"
app:showAsAction="never" />
</group>
</item>
ResultadosFragment - OnCrateOptionsMenu() AND onOptionsItemSelected()
#Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Inflate the menu; this adds items to the action bar if it is present.
inflater.inflate(R.menu.menu_resultados, menu);
super.onCreateOptionsMenu(menu, inflater);
mOptionsMenu = menu;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menuRemoveLowReputation:
exibirMensagemReputacaoMaxima();
return true;
/**case R.id.menuSortClosest:
exibirMensagemEdt();
return true;**/
case R.id.menuSortClosestGps:
trimmarAteCoeficienteQuinze();
return true;
case R.id.menuDeleteMaiorQue:
exibirMensagemDeletarMaiorQue();
return true;
case R.id.menuInserirCep:
exibirMensagemInserirCep();
return true;
case R.id.menuSortPrecoMenorNormalPacTabelado:
sortCheaperNormalPacTabelado();
mAdapter.clear();
mAdapter.addAll(recordsGlobal);
mAdapter.notifyDataSetChanged();
mAdapter.notifyDataSetInvalidated();
return true;
case R.id.menuSortPrecoMenorExpressoSedex:
sortCheaperExpressoSedexTabelado();
mAdapter.clear();
mAdapter.addAll(recordsGlobal);
mAdapter.notifyDataSetChanged();
mAdapter.notifyDataSetInvalidated();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
menu_resultados.XML
<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"
app:showAsAction="ifRoom"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">
<item
android:id="#+id/menuRemoveLowReputation"
android:title="Remover reputação baixa" />
<!-- <item
android:id="#+id/menuSortClosest"
android:title="Mais Próximos - CEP" /> -->
<item
android:id="#+id/menuSortClosestGps"
android:title="C.V menor 15" />
<item
android:id="#+id/menuDeleteMaiorQue"
android:title="Deletar maior que" />
<item
android:id="#+id/menuInserirCep"
android:title="Inserir novo CEP para Frete" />
<item
android:id="#+id/menuSortPrecoMenorNormalPacTabelado"
android:title="Listar por preço menor Normal/Pac/Tabelado" />
<item
android:id="#+id/menuSortPrecoMenorExpressoSedex"
android:title="Listar por preço menor Expresso/Sedex" />
You can write menu.clear() in OnCreateOptionsMenu()
#Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.menu, menu);
}
I do not know if it's the best practice. If someone knows tell us. =)
These changes solved the issue!
menu_search_bar.XML
<?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="com.example.marcelofb.cratediggersguide.MainActivity">
<item
android:id="#+id/search"
android:icon="#android:drawable/ic_menu_search"
android:title="#string/search_title"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|always" />
<item
android:id="#+id/searchOptions"
android:icon="#android:drawable/ic_menu_manage"
android:title="Tools"
app:showAsAction="always">
<menu>
<item android:title="Menu No. 2">
<group
android:id="#+id/radioGroupNovoUsado"
android:checkableBehavior="single">
<item
android:id="#+id/novo"
android:title="NOVO"
app:showAsAction="never"></item>
<item
android:id="#+id/usado"
android:title="USADO"
app:showAsAction="never" />
</group>
</item>
<item
android:id="#+id/radioGroupCompactoLPItem"
android:title="Menu No. 2">
<group
android:id="#+id/radioGroupCompactoLP"
android:checkableBehavior="single">
<item
android:id="#+id/compacto"
android:title="COMPACTO"
app:showAsAction="never" />
<item
android:id="#+id/longplay"
android:title="LP"
app:showAsAction="never" />
</group>
</item>
<item
android:id="#+id/radioGroupNacionalImportadoItem"
android:title="Menu No. 2">
<group
android:id="#+id/radioGroupNacionalImportado"
android:checkableBehavior="single">
<item
android:id="#+id/nacional"
android:title="NACIONAL"
app:showAsAction="never" />
<item
android:id="#+id/importado"
android:title="IMPORTADO"
app:showAsAction="never" />
</group>
</item>
</menu>
</item>
menu_resultados.XML
<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"
app:showAsAction="ifRoom"
tools:context="com.example.marcelofb.cratediggersguide.MainActivity">
<item
android:id="#+id/searchOptions"
android:icon="#drawable/ic_filter_list_white_24dp"
android:title="Tools"
app:showAsAction="always">
<menu>
<item
android:id="#+id/menuRemoveLowReputation"
android:title="Remover reputação baixa" />
<!-- <item
android:id="#+id/menuSortClosest"
android:title="Mais Próximos - CEP" /> -->
<item
android:id="#+id/menuSortClosestGps"
android:title="C.V menor 15" />
<item
android:id="#+id/menuDeleteMaiorQue"
android:title="Deletar maior que" />
<item
android:id="#+id/menuInserirCep"
android:title="Inserir novo CEP para Frete" />
<item
android:id="#+id/menuSortPrecoMenorNormalPacTabelado"
android:title="Listar por preço menor Normal/Pac/Tabelado" />
<item
android:id="#+id/menuSortPrecoMenorExpressoSedex"
android:title="Listar por preço menor Expresso/Sedex" />
</menu>
</item>
I want to show icon in Option Menus. I tried many methods but I can't find success.In my toolbar some icon already put but i want icon in my Option menu.
I want same as below image:-
My menu.xml:-
<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_search"
android:title="#string/action_search"
android:orderInCategory="1"
android:icon="#drawable/search"
app:showAsAction="ifRoom" />
<item
android:id="#+id/action_cart"
android:title="#string/action_search"
android:orderInCategory="2"
android:icon="#drawable/shoppingcart"
android:actionLayout="#layout/feed_update_count"
app:showAsAction="ifRoom" />
<item
android:id="#+id/menu_overflow"
android:title="#string/my_cart"
android:icon="#drawable/ic"
android:orderInCategory="11111"
app:showAsAction="always">
<menu>
<item
android:id="#+id/login"
android:title="#string/login"
android:orderInCategory="1"
android:icon="#drawable/account"
app:showAsAction="always|withText"/>
<item
android:id="#+id/my_order"
android:title="#string/my_order"
android:orderInCategory="2"
android:icon="#drawable/track"
app:showAsAction="withText"/>
<item
android:id="#+id/wishlist"
android:title="#string/wishlist"
android:orderInCategory="3"
android:icon="#drawable/wishlist"
app:showAsAction="withText"/>
</menu>
</item>
</menu>
I am new in android developing anyone can help me how to show icon in option menu. Thanks in advance!
By default the overflow menu will disable the icon and only show text, you need some workaround.
1st way
You can enable it by adding the following codes into your class
#Override
public boolean onMenuOpened(int featureId, Menu menu)
{
if(featureId == Window.FEATURE_ACTION_BAR && menu != null){
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try{
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
}
catch(NoSuchMethodException e){
Log.e(TAG, "onMenuOpened", e);
}
catch(Exception e){
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}
2nd way
Create your own overflow item and a nested menu to show both the icon and the text.
Example,
<item
android:id="#+id/overflow"
android:icon="#drawable/ic_overflow_white"
android:orderInCategory="201"
android:title="#string/overflow"
app:showAsAction="always">
<menu>
<item
android:id="#+id/cab_menu_select_all"
android:icon="#drawable/ic_select_all_grey"
android:orderInCategory="100"
android:title="#string/cab_menu_select_all"
app:showAsAction="always|withText"></item>
</menu>
</item>
try this code its works for you
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/action_search"
android:icon="#drawable/ic_action_search"
android:showAsAction="always"
android:title="#string/action_search"/>
<!-- Settings, should always be in the overflow -->
<item
android:id="#+id/action_location_found"
android:icon="#drawable/ic_action_location_found"
android:showAsAction="always"
android:title="#string/action_location_found"/>
<item
android:id="#+id/menu_overflow"
android:icon="#drawable/ic_action_menu"
android:orderInCategory="11111"
android:showAsAction="always">
<menu>
<!-- Refresh -->
<item
android:id="#+id/action_refresh"
android:icon="#drawable/ic_action_refresh"
android:showAsAction="ifRoom"
android:title="#string/action_refresh"/>
<!-- Help -->
<item
android:id="#+id/action_help"
android:icon="#drawable/ic_action_help"
android:showAsAction="never"
android:title="#string/action_help"/>
<!-- Check updates -->
<item
android:id="#+id/action_check_updates"
android:icon="#drawable/ic_action_refresh"
android:showAsAction="never"
android:title="#string/action_check_updates"/>
</menu>
</item>
</menu>
- See more at: http://www.theappguruz.com/blog/android-working-android-actionbar#sthash.ArNQTEBF.dpuf
Create your menu xml as follow
<item
android:id="#+id/menu_item_action_parameters"
android:title="#string/text_parameters"
android:icon="#drawable/ic_menu_parameter"
app:showAsAction="ifRoom|withText"/> >
<menu>
<item
android:id="#+id/action_dropdown1"
android:title="#string/dropdown_1" />
<item
android:id="#+id/action_dropdown2"
android:title="#string/dropdown2" />
<item
android:id="#+id/action_dropdown3"
android:title="#string/dropdown3" />
</menu>
</item>
<item
more item
</item>
Then
#Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_dropdown1:
.....
return true;
case R.id.action_dropdown2:
.....
return true;
.....
default:
return super.onOptionsItemSelected(item);
}
}
this is completely working code.Mark this answer up if it helps. :) Happy coding.
you Need to add tools:context="your class" to menu tag
<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/one"
android:title="action_notification"
app:showAsAction="always"/>
<item
android:id="#+id/action_notification2"
android:icon="#drawable/two"
android:title="action_notification"
app:showAsAction="always"/>
<item
android:id="#+id/action_notification3"
android:icon="#drawable/three"
android:title="action_notification"
app:showAsAction="always"/>
</menu>
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
you shold write tool:context to menu tag then run you will get icons to your text
I have map activity and I am trying to add toggle button to the actionbar next to the setting menu which contains the map type but I am facing a problem: the toggle button is being added to the setting items menu and not directly to the actionbar.
How can I add this toggle button to the actionbar next to the setting menu?
map_menu.xml
<item
android:id="#+id/mapTypeNormal"
android:showAsAction="always"
android:title="Normal"/>
<item
android:id="#+id/mapTypeSatellite"
android:showAsAction="always"
android:title="Satellitte"/>
<item
android:id="#+id/mapTypeTerrain"
android:showAsAction="always"
android:title="Terrain"/>
<item
android:id="#+id/mapTypeHybrid"
android:showAsAction="always"
android:title="Hybrid"/>
<item
android:id="#+id/mapTypeNone"
android:showAsAction="always"
android:title="None"/>
<item android:id="#+id/menu_toggle"
android:showAsAction="ifRoom|withText"
android:icon="#drawable/off"
android:title="Share"
/>
map activity:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.map_menu, menu);
System.out.println("ABC MAP onCreateOptionsMenu was invoked.");
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mapTypeNone:
map.setMapType(GoogleMap.MAP_TYPE_NONE);
break;
case R.id.mapTypeNormal:
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
break;
case R.id.mapTypeSatellite:
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
break;
case R.id.mapTypeTerrain:
map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
break;
case R.id.mapTypeHybrid:
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
break;
default:
break;
}
switch (item.getItemId()) {
case R.id.menu_toggle:
if (birthSort) {
// change your view and sort it by Alphabet
item.setIcon(R.drawable.on);
item.setTitle("On");
birthSort = false;
} else {
// change your view and sort it by Date of Birth
item.setIcon(R.drawable.off);
item.setTitle("Off");
birthSort = true;
}
}
return super.onOptionsItemSelected(item);
}
}
Edit:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/mapTypeNormal"
android:showAsAction="never"
android:title="Normal"/>
<item
android:id="#+id/mapTypeSatellite"
android:showAsAction="never"
android:title="Satellitte"/>
<item
android:id="#+id/mapTypeTerrain"
android:showAsAction="never"
android:title="Terrain"/>
<item
android:id="#+id/mapTypeHybrid"
android:showAsAction="never"
android:title="Hybrid"/>
<item
android:id="#+id/mapTypeNone"
android:showAsAction="never"
android:title="None"/>
<item
android:id="#+id/menu_toggle"
android:icon="#drawable/off"
android:showAsAction="always"
android:title="Share"/>
</menu>
While using AppCompat library, the showAsAction from http://schemas.android.com/apk/res/android doesn't work for some reason, you'll have to use one that comes from http://schemas.android.com/apk/res-auto.
You'll can add the required schema with the namespace app as shown below:
xmlns:app="http://schemas.android.com/apk/res-auto"
And then for menu items that you want to keep visible on the ActionBar, you can add the following attribute:
app:showAsAction="always"
and for the others you can add:
app:showAsAction="ifRoom"
So your map_menu.xml would be:
<?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">
<item
android:id="#+id/mapTypeNormal"
app:showAsAction="never"
android:title="Normal"/>
<item
android:id="#+id/mapTypeSatellite"
android:showAsAction="never"
android:title="Satellitte"/>
<item
android:id="#+id/mapTypeTerrain"
app:showAsAction="never"
android:title="Terrain"/>
<item
android:id="#+id/mapTypeHybrid"
app:showAsAction="never"
android:title="Hybrid"/>
<item
android:id="#+id/mapTypeNone"
app:showAsAction="never"
android:title="None"/>
<item
android:id="#+id/menu_toggle"
android:icon="#drawable/off"
app:showAsAction="always"
android:title="Share"/>
</menu>
I did this and it's working for me
<item
android:id="#+id/mapTypeNormal"
app:showAsAction="never"
android:title="Normal"/>
<item
android:id="#+id/mapTypeSatellite"
app:showAsAction="never"
android:title="Satellitte"/>
<item
android:id="#+id/mapTypeTerrain"
app:showAsAction="never"
android:title="Terrain"/>
<item
android:id="#+id/mapTypeHybrid"
app:showAsAction="never"
android:title="Hybrid"/>
<item
android:id="#+id/mapTypeNone"
app:showAsAction="never"
android:title="None"/>
<item
android:id="#+id/menu_toggle"
android:icon="#drawable/off"
app:showAsAction="always"
android:title="Share"/>
I have tried everything that i could have. gone through 6-7 articles except http://developer.android.com/ and things totally messed up i don't know what i am missing or taking the reference of wrong articles.
Here is my code:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/userIcon"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="#drawable/icon_user"
android:title="#string/app_name"/>
<item
android:id="#+id/listIcon"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="#drawable/icon_list"
android:title="#string/app_name"/>
<item
android:id="#+id/menu_red"
android:orderInCategory="1"
android:showAsAction="ifRoom|withText"
android:title="#string/get_back"/>
<item
android:id="#+id/menu_green"
android:orderInCategory="2"
android:showAsAction="ifRoom|withText"
android:title="#string/get_login"/>
</menu>
Activity.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.activity_product_list, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.listIcon:
Toast.makeText(this,
"Menu list",
Toast.LENGTH_LONG).show();
break;
case R.id.userIcon:
Toast.makeText(this,
"User Icon",
Toast.LENGTH_LONG).show();
break;
}
//return super.onOptionsItemSelected(item);
return true;
}
Thanks a lot
Order in category determines the order appearance, from low to high check this link -> Set Item postition in ActionBar try the following code, but i'm not sure about in which order you want the menus to appear
<item
android:id="#+id/userIcon"
android:orderInCategory="1"
android:showAsAction="always"
android:menuCategory="system"
android:icon="#drawable/icon_user"
android:title="#string/app_name"/>
<item
android:id="#+id/listIcon"
android:orderInCategory="2"
android:showAsAction="always"
android:menuCategory="system"
android:icon="#drawable/icon_list"
android:title="#string/app_name"/>
<item
android:id="#+id/menu_red"
android:orderInCategory="99"
android:showAsAction="ifRoom|withText"
android:title="#string/get_back"/>
<item
android:id="#+id/menu_green"
android:orderInCategory="100"
android:showAsAction="ifRoom|withText"
android:title="#string/get_login"/>
A the moment I have this options menu
I would like to add to options at the bottom below hybrid map. Here is my code. I have added in where I would like the two other menu options to be but they don't work.
#Override
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case R.id.normal_map:
mapType=GoogleMap.MAP_TYPE_NORMAL;
break;
case R.id.satellite_map:
mapType=GoogleMap.MAP_TYPE_SATELLITE;
break;
case R.id.terrain_map:
mapType=GoogleMap.MAP_TYPE_TERRAIN;
break;
case R.id.hybrid_map:
mapType=GoogleMap.MAP_TYPE_HYBRID;
break;
case R.id.games2014:
games2014=true;
break;
case R.id.games_past:
games2014=false;
break;
}
googleMap.setMapType(mapType);
return true;
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/map_types"
android:title="Menu"
android:showAsAction="always">
<menu>
<item android:id="#+id/normal_map"
android:title="Mormal map"/>
<item android:id="#+id/satellite_map"
android:title="Satellite map"/>
<item android:id="#+id/terrain_map"
android:title="Terrain map"/>
<item android:id="#+id/hybrid_map"
android:title="Hybrid map"/>
<Item android:id="#+id/games2014"
android:title="2014 Games"/>
<Item android:id="#+id/games_past"
android:title="Previous Games"/>
</menu>
</item>
In your item you declared it as Item which would cause it not to add
#Override
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case R.id.normal_map:
mapType=GoogleMap.MAP_TYPE_NORMAL;
break;
case R.id.satellite_map:
mapType=GoogleMap.MAP_TYPE_SATELLITE;
break;
case R.id.terrain_map:
mapType=GoogleMap.MAP_TYPE_TERRAIN;
break;
case R.id.hybrid_map:
mapType=GoogleMap.MAP_TYPE_HYBRID;
break;
case R.id.games2014:
games2014=true;
break;
case R.id.games_past:
games2014=false;
break;
}
googleMap.setMapType(mapType);
return true;
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/map_types"
android:title="Menu"
android:showAsAction="always">
<menu>
<item android:id="#+id/normal_map"
android:title="Mormal map"/>
<item android:id="#+id/satellite_map"
android:title="Satellite map"/>
<item android:id="#+id/terrain_map"
android:title="Terrain map"/>
<item android:id="#+id/hybrid_map"
android:title="Hybrid map"/>
<item android:id="#+id/games2014"
android:title="2014 Games"/>
<item android:id="#+id/games_past"
android:title="Previous Games"/>
</menu>
</item>
<Item android:id="#+id/games2014"
android:title="2014 Games"/>
<Item android:id="#+id/games_past"
android:title="Previous Games"/>
Your "I" in "Item" is capital. It should be a lowercase "i" - "item"