tipos studio inflar example context bar actionviewclass android drop-down-menu menu android-actionbar submenu

inflar - menu overflow android studio



El elemento del menú de la barra de acción de Android con actionLayout no funciona correctamente (4)

Hola estoy desarrollando una aplicación para Android. En mi aplicación estoy usando la acción Sherlock. He definido algunos elementos del menú en la barra de acción, de la siguiente manera.

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/card_menu" android:actionLayout="@layout/action_button" android:showAsAction="always" android:title="cards"> <menu> <item android:id="@+id/C1" android:title="C1"/> <item android:id="@+id/C2" android:title="c2"/> <item android:id="@+id/C3" android:title="C3"/> </menu> </item> <item android:id="@+id/notification" android:actionLayout="@layout/notification_icon" android:icon="@drawable/notification" android:showAsAction="always" android:title="Notifications"/> <item android:id="@+id/filter" android:icon="@drawable/filter" android:showAsAction="always" android:title="Filter"/> </menu>

y Mi action_button se ve como:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/menu_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/spinner_ab_focused_maroon"/> <TextView android:id="@+id/menu_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/imageView0" android:text="C1"/> </RelativeLayout>

Ahora se muestra todo, pero mi problema es que cuando hago clic en el card_menu item de card_menu item donde defino los submenús y también defino el diseño de la acción. No está mostrando esos submenús. Mis otros elementos del menú están funcionando correctamente. Solo cuando defino el diseño de acción para mi elemento que contiene submenús que no puedo mostrar en submenú. Si elimino el diseño de acción funciona bien.

Sé que si definimos el diseño de acción para el elemento, entonces tenemos que manejar manualmente el escucha de clics. Lo hice de la siguiente manera

final MenuItem item = menu.findItem(R.id.card_menu); item.getActionView().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onOptionsItemSelected(item); Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show(); } });

Puedo manejar el evento de clic para ese elemento pero no puedo mostrar los elementos del submenú desplegable.

¿Cómo resuelvo este problema?


Código de trabajo completo

<item android:title="search" android:id="@+id/mSearch" app:actionLayout="@layout/my_custom_menu_item" android:orderInCategory="100" app:showAsAction="always"/>

Código:

@Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.menu,menu); MenuItem item = menu.findItem(R.id.mSearch); ImageView iv= (ImageView) item.getActionView().findViewById(R.id.search_1); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show(); } }); return true; }


La respuesta aceptada no funcionó para mí. Mi submenú se comportó diferente en diferentes dispositivos. En Motorola Moto X fue así:

Puede ver que el submenú está en una posición incorrecta (hice clic en el ícono de burbuja a la derecha de la barra de acción).

Así que al final se me ocurrió una solución diferente: usar PopupMenu en su lugar. El código se ve así:

@Override public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_fragment_chat, menu); final MenuItem item = menu.findItem(R.id.menu_item_actionbar_avatar); MenuItemCompat.getActionView(item).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showProfileMenuPopup(v); } }); } public void showProfileMenuPopup(View v) { PopupMenu popup = new PopupMenu(getActivity(), v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.menu_avatar_actions, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { return false; } }); popup.show(); }

Y funcionó :)


Prueba este código en tu actividad.
Asegúrese de configurar correctamente su

R.menu.menuidentifier

R.id.menuitemidentifier

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbarhelpmenu, menu); final Menu m = menu; final MenuItem item = menu.findItem(R.id.ActionConnection); item.getActionView().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { m.performIdentifierAction(item.getItemId(), 0); } }); return true; }


Refiera a la answer

Si hay un botón en el diseño de acción, para obtener la devolución de llamada del elemento del menú, no olvide configurar el botón

android:clickable="false"