studio programacion para móviles menus ejemplos desplegable desarrollo curso aplicaciones android android-actionbar-compat

android - programacion - Los elementos del menú no aparecen en la barra de acciones



menu para android (3)

Esta pregunta ya tiene una respuesta aquí:

Estoy usando appcompat en mi aplicación. Quiero que los elementos del menú se muestren en la barra de acciones o al menos el desbordamiento (3 puntos) para mostrarlos cuando no haya espacio. Hay mucho espacio en la barra de acciones, pero aún así no se muestran. El flujo del menú sube desde abajo y eso también solo cuando se presiona el botón de menú.

menu_activity.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_lang" android:showAsAction="always" android:title="@string/menu_lang" android:icon="@android:drawable/ic_input_lang"/> </menu>

actividad:

@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_activity, menu); return true; }

Esta post dice que no funciona cuando el botón de menú de hardware está presente. Pero otras aplicaciones pueden mostrar elementos en el mismo dispositivo. Entonces, esa respuesta parece ser incorrecta. ¿Alguien puede ayudarme con esto?


Bien, creo que encontré una solución para ti. Se llama Menú de desbordamiento y debe llamar al método siguiente en su método onCreate.

private void getOverflowMenu() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } }

Prueba esto y avísame si funciona para ti.

EDITAR:

Creo que entendí tu problema finalmente. Puedo darte una idea. Si no desea utilizar el menú de desbordamiento y solo muestra elementos de menú como se muestran en la captura de pantalla que ha publicado, puede crear un diseño sobre su actividad.

Puedes tomar un diseño lineal, dar un fondo que tenga el mismo aspecto que la barra de acciones y colocar los íconos que quieras poner ahí, y darles funcionalidad con onClickListener. Espero que esto te dé una idea. De esta forma puedes crear tu propio menú personalizado. Pruebe el diseño a continuación y reemplace ic_launcher drawable con iconos de menú. A continuación, simplemente configure OnClickListeners para ellos y realice las funciones que desee realizar dentro del método Click.

<RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="#66000000" > <ImageView android:id="@+id/xMenuBtn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:background="@drawable/ic_launcher" /> <TextView android:id="@+id/xMenuTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chats" android:textSize="18sp" android:layout_toRightOf="@+id/xMenuBtn1" android:layout_centerVertical="true" /> <ImageView android:id="@+id/xMenuBtn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/xMenuBtn3" android:background="@drawable/ic_launcher" /> <ImageView android:id="@+id/xMenuBtn3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="@drawable/ic_launcher" /> </RelativeLayout>


Parece que está utilizando el menú incorrecto: su archivo se llama "menu_activity.xml" e infla el menú con el Id. De R.menu.reminder_menu : R.menu.reminder_menu

El nombre del recurso del menú debe ser el mismo que el nombre del archivo, es decir: R.menu.manu_activity

Pruébalo con esto otra vez, me encontré con esto también una vez y me volvió loco ...

Actualización Después de aclarar que la parte de arriba era para ofuscación, asegúrese de que:

  1. Extiende ActionBarActivity.
  2. Utiliza (o amplía) uno de los temas de Theme.AppCompat para la actividad (o toda la aplicación)
  3. Debido a que en dispositivos más antiguos, los atributos relacionados con la barra de acciones no están presentes, asegúrese de que todos estos atributos en el XML se usen con un espacio de nombres personalizado. Aquí ese sería el atributo showAsAction , para que la biblioteca de compatibilidad pueda recogerlos.

Ya tenía definido el espacio de nombre personalizado ("aplicación", en la etiqueta del menú). Necesita cambiar la etiqueta android:showAsAction a la app:showAsAction según la guía de Android.

Su menú_actividad.xml corregido se vería así:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_lang" app:showAsAction="always" android:title="@string/menu_lang" android:icon="@android:drawable/ic_input_lang"/> </menu>

La guía extendida de Android para barra de acción cubre estas nuevas y desagradables trampas ...


Pruebe su actividad en Crear ():

ActionBar bar = getSupportActionBar(); bar.setTitle(R.string.app_name);

y entonces :

@Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); getSupportMenuInflater().inflate(R.menu.menu_activity, menu); return super.onPrepareOptionsMenu(menu); }