Menú emergente en el clic de un botón en la barra de acción
Estoy tratando de implementar una barra de acción en la que uno de los botones de clic muestra un menú emergente. Aquí está el menú. XML (elementos de menú en la barra de acción)
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/search" android:icon="@drawable/ic_action_search" android:orderInCategory="0" android:showAsAction="always" android:title="@string/menu_search"/> <item android:id="@+id/refresh" android:icon="@drawable/ic_action_refresh" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_refresh"/> <Item android:id="@+id/popup" android:icon="@drawable/ic_action_search" android:onClick="showPopup" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_search" />
Deseo mostrar un menú emergente en el tecleo del artículo que tiene id "@ + id / popup".
- Cómo abrir la ventana emergente en EditText prensa larga en el estudio de Android
- ¿Cómo hacer una lista emergente como un hilandero sin el hilador en androide?
- ¿Puede PopupWindow de Android mostrar otro PopupWindow?
- Cómo ocultar el popup de filtro en ListView en Android?
- Cómo cambiar el menú emergente del color de fondo android
Aquí está el XML para el menú emergente
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:icon="@drawable/ic_action_search" android:orderInCategory="0" android:showAsAction="always" android:title="@string/menu_search"/> <item android:id="@+id/item2" android:icon="@drawable/ic_action_search" android:orderInCategory="1" android:showAsAction="always" android:title="@string/menu_search"/>
Aquí está el método onClick para el botón
public void showPopup(View v) { PopupMenu popup = new PopupMenu(this, v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.overflow, popup.getMenu()); popup.show(); }
Y el problema es que no aparece ninguna ventana emergente al hacer clic en ese botón. Necesito ayuda.
- Spinner popup color de fondo en Android 5.0
- ¿Cómo mostrar un cuadro de edición de texto "sobre" la pantalla?
- Cómo llamar o aparecer fragmento al hacer clic en el botón
- Lista emergente de hilandera personalizada en android
- Quiero establecer el ancho de popup en tiempo de ejecución de acuerdo al tamaño del título en android
- Cómo modificar la vista de la pantalla de llamadas entrantes y salientes en android
- Pantalla emergente / superpuesta en panal de android
- Pequeño Popup para instrucciones, como los cuadrados
Hola cada uno, que es mi propia solución: he creado el método showPopup, y luego lo llamé en el onOptionsItemSelected como este:
public void showPopup(){ View menuItemView = findViewById(R.id.menu_save); PopupMenu popup = new PopupMenu(getActivity(), menuItemView); MenuInflater inflate = popup.getMenuInflater(); inflate.inflate(R.menu.popup, popup.getMenu()); popup.show(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_save: showPopup(); return true; default: return super.onOptionsItemSelected(item); } }
Popup.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/decon" android:showAsAction="ifRoom" android:title="@string/decon"/> <item android:id="@+id/mRes" android:showAsAction="ifRoom" android:title="@string/mesRes"/> </menu>
Main.xml => se llama onCreateOptionsMenu
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_save" android:enabled="true" android:icon="@drawable/action_save" android:showAsAction="ifRoom|withText" android:title="@string/action_save" android:visible="true"/> </menu>
Finalmente yo
implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method.
Encontré esto aquí: http://developer.android.com/guide/topics/ui/menus.html
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/selectImg" android:icon="@android:drawable/ic_dialog_dialer" android:showAsAction="always"> <menu> <item android:id="@+id/top" android:title="@string/topimg"/> <item android:id="@+id/bottom" android:title="@string/botimg" /> </menu> </item> </menu>
Puede colocar un menú dentro de un menú para presentar submenús cuando se hace clic en el elemento. A continuación, en Java, puede utilizar los mismos métodos como de costumbre.
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items // View v = findViewById(R.id.f); switch (item.getItemId()) { case R.id.top: //action return true; default: return super.onOptionsItemSelected(item); } }
El id de 'top' en el xml sigue siendo reconocido aunque sea un submenú. Esto funcionó para mí y se ve como el menú emergente.
Como el menú emergente es un MENÚ, usted tiene que manejar esto mediante la implementación de "onOptionsItemSelected". Podrá decir qué hacer para cada opción del menú. Reemplazará la opción "onClick" que ha definido y se llamará automáticamente.
Intenta cambiar 'this' a getActivity ().
public void showPopup(View v) { PopupMenu popup = new PopupMenu(getActivity(), v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.overflow, popup.getMenu()); popup.show(); }
Espero eso ayude..!!
android:onClick="popup"
Puede ser que usted debe cambiarlo a android:onClick="showPopup"
?
Encontré una solución a esto. En lugar de utilizar el menú XML para inflar el menú emergente, hice un archivo de diseño XML.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#8b8989" android:orientation="vertical" android:padding="10dip" > <TextView android:id="@+id/menuItem1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu1" /> <TextView android:id="@+id/menuItem2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu2" /> <TextView android:id="@+id/menuItem3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/menu3" /> </LinearLayout>
Y cambié el método onClick
public void showPopup(View v) { LayoutInflater inflater = (LayoutInflater) MainActivity.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); PopupWindow pw = new PopupWindow(inflater.inflate( R.layout.overflow_layout, null, false), 300, 400, true); pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0, 0); }
Esto resolvió el problema
- Cómo enviar múltiples imágenes al servidor mediante MultipartEntity desde android
- ListView: textIsSelectable y onItemClick