Cómo mostrar el elemento de menú con el icono y el texto en AppCompatActivity

He intentado combinaciones diferentes en el archivo 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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" app:showAsAction="ifRoom|withText" /> </menu> 

o

 <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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" app:showAsAction="always|withText" /> </menu> 

o

 <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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" app:showAsAction="withText" /> </menu> 

o

 <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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" android:showAsAction="always|withText" /> </menu> 

Traté de configurarlo programáticamente

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){ MenuItem item = menu.add(R.string.menu_create_alarm); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT|MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setIcon(R.drawable.ic_action_accept); item.setOnMenuItemClickListener( new OnMenuItemClickListener(){ @Override public boolean onMenuItemClick(MenuItem item){ saveAlarm(); return true; } } ); // inflater.inflate(R.menu.menu_create_alarm, menu); super.onCreateOptionsMenu(menu, inflater); } 

o

 <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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" android:showAsAction="always|withText" app:showAsAction="always|withText" /> </menu> 

Sin embargo, sólo aparece Icono. Y hay planty de la habitación, causa que no fijé el título de la barra de herramientas. Quitar los menús y volver a colocarlos con el botón dentro de la barra de herramientas no se puede.
¿Cómo mostrar el texto?

Necesita agregar herramientas: context = "your class" a la etiqueta de menú

 <?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); } 

Usted shold escribe la herramienta: contexto a la etiqueta del menú entonces la ejecución usted conseguirá los iconos a su texto

 protected boolean onPrepareOptionsPanel(View view, Menu menu) { if (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 (Exception e) { Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e); } } } return super.onPrepareOptionsPanel(view, 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_create_alarm" android:icon="@drawable/ic_action_accept" android:orderInCategory="100" android:title="@string/menu_create_alarm" android:showAsAction="always|withText" app:showAsAction="always|withText" /> </menu> 

Java:

 @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).inflate(R.menu.menu_frg_safetybox, menu); super.onCreateOptionsMenu(menu, inflater); } 

Prueba estos dos juntos

 app:showAsAction="always|withText" android:showAsAction="always|withText" 

'Always | withText' funcionará si hay suficiente espacio, de lo contrario colocará sólo el icono. Usted puede ver que al girar el teléfono al modo horizontal.

  <item android:id="@+id/action_create_alarm" android:icon="@drawable/ic_launcher" android:title="Save" app:showAsAction="always|withText" /> 
 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.menu_patient_home_screen, menu); menu.add(0, 1, 1, menuIconWithText(getResources().getDrawable(R.mipmap.user_2), getResources().getString(R.string.action_profile))); menu.add(0, 2, 2, menuIconWithText(getResources().getDrawable(R.mipmap.add_user), getResources().getString(R.string.action_add_user))); menu.add(0, 3, 3, menuIconWithText(getResources().getDrawable(R.mipmap.switch_profile), getResources().getString(R.string.action_switch_profile))); menu.add(0, 4, 4, menuIconWithText(getResources().getDrawable(R.mipmap.logout), getResources().getString(R.string.action_sign_out))); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement switch (item.getItemId()) { case 1: Toast.makeText(PatientHomeScreen.this, "Profile is Clicked", Toast.LENGTH_SHORT).show(); return true; case 2: Toast.makeText(PatientHomeScreen.this, "Add New User is Clicked", Toast.LENGTH_SHORT).show(); return true; case 3: Toast.makeText(PatientHomeScreen.this, "Switch Profile is Clicked", Toast.LENGTH_SHORT).show(); return true; case 4: Toast.makeText(PatientHomeScreen.this, "Sign Out is Clicked", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); } private CharSequence menuIconWithText(Drawable r, String title) { r.setBounds(0, 0, r.getIntrinsicWidth(), r.getIntrinsicHeight()); SpannableString sb = new SpannableString(" " + title); ImageSpan imageSpan = new ImageSpan(r, ImageSpan.ALIGN_BOTTOM); sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return sb; } 

Captura de pantalla del emulador

Espero que esto te ayudará

Añadiendo a la respuesta de dev_ry, hay una manera mucho más suave sin usar la reflexión simplemente emitiendo y suprimiendo la advertencia de API restringida:

 import android.support.v7.view.menu.MenuBuilder; @SuppressLint("RestrictedApi") @Override public boolean onCreateOptionsMenu(Menu menu) { if (menu instanceof MenuBuilder) { ((MenuBuilder) menu).setOptionalIconsVisible(true); } getMenuInflater().inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } 
  • Cómo poner superposición Ver sobre barra de acción Sherlock
  • Disposición personalizada de MenuItem de Android
  • Manejo de un elemento de menú Haga clic en Evento - Android
  • Elemento de menú de opciones personalizadas de Android
  • ActionBarSherlock menú de texto del panel de menú duro
  • Android: muestra el menú de varias actividades
  • ¿Qué debo pasar por la raíz al inflar una presentación para utilizarla en ActionView de MenuItem?
  • Icono de menú que no se muestra en la barra de acción
  • Android: menuItem.expandActionView () en el nivel API <14
  • Compruebe si MenuItem está en desbordamiento de ActionBar
  • Iconos translúcidos en ActionBar cuando está inhabilitado: ¿sólo en mi teléfono?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.