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
- Iniciar animación en carga de página, detener en página cargada
- Cómo agregar elementos de submenú a ActionBar acción en código?
- ¿Cómo puedo establecer la visibilidad de un elemento de ActionBar en fragmento diferente
- Android - Cómo cambiar dinámicamente el texto del elemento de menú fuera de onOptionsItemsSelected o onCreateOptionsMenu
- ¿Cómo puedo ocultar un elemento de menú en la barra de acción?
<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?
- Elemento de menú Android 4.3 showAsAction = "siempre" ignorado
- ¿Cómo conseguir la vista de la acción del artículo del menú?
- Cómo utilizar los elementos de la barra de herramientas con Viewpager + Fragmentos
- Configuración de la descripción del contenido del menú de opciones android Talkback
- Tamaño del icono de menú de Android
- Cómo incluir un elemento de menú común en varios menús en el menú de Android xml?
- Obtención de MenuItem en onCreate
- Cómo configurar el ID para los elementos del menú emergente, que se encuentra como id de la vista?
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; }
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); }