Saltar al contenido

Menú desplegable / emergente personalizado de Android

Te sugerimos que revises esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Actualizar: Para crear un menú emergente en Android con Kotlin, consulte mi respuesta aquí.

Para crear un menú emergente en Android con Java:

Crea un archivo de diseño activity_main.xml debajo res/layout directorio que contiene solo un botón.

Nombre del archivo: activity_main.xml

  

    

Crea un archivo popup_menu.xml debajo res/menu directorio

Contiene tres elementos como se muestra a continuación.

Nombre del archivo: poupup_menu.xml

  

      

      

      

  

Clase MainActivity que muestra el menú emergente al hacer clic en el botón.

Nombre del archivo: MainActivity.java

public class MainActivity extends Activity   
    private Button button1;  

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() 
            @Override
            public void onClick(View v) 
                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(MainActivity.this, button1);
                //Inflating the Popup using xml file
                popup.getMenuInflater()
                    .inflate(R.menu.popup_menu, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() 
                    public boolean onMenuItemClick(MenuItem item) 
                        Toast.makeText(
                            MainActivity.this,
                            "You Clicked : " + item.getTitle(),
                            Toast.LENGTH_SHORT
                        ).show();
                        return true;
                    
                );

                popup.show(); //showing popup menu
            
        ); //closing the setOnClickListener method
    

Para agregar programáticamente:

PopupMenu menu = new PopupMenu(this, view);

menu.getMenu().add("One");
menu.getMenu().add("Two");
menu.getMenu().add("Three");

menu.show();

Siga este enlace para crear un menú mediante programación.

Sé que esta es una pregunta antigua, pero encontré otra respuesta que funcionó mejor para mí y no parece aparecer en ninguna de las respuestas.

Crea un diseño xml:








Cree una ListPopupWindow y un mapa con el contenido:

ListPopupWindow popupWindow;
List> data = new ArrayList<>();
HashMap map = new HashMap<>();
    map.put(TITLE, getString(R.string.left));
    map.put(ICON, R.drawable.left);
    data.add(map);
    map = new HashMap<>();
    map.put(TITLE, getString(R.string.right));
    map.put(ICON, R.drawable.right);
    data.add(map);

Luego, al hacer clic, muestre el menú usando esta función:

private void showListMenu(final View anchor) 
    popupWindow = new ListPopupWindow(this);

    ListAdapter adapter = new SimpleAdapter(
            this,
            data,
            R.layout.shoe_select,
            new String[] TITLE, ICON, // These are just the keys that the data uses (constant strings)
            new int[] R.id.shoe_select_text, R.id.shoe_select_icon); // The view ids to map the data to

    popupWindow.setAnchorView(anchor);
    popupWindow.setAdapter(adapter);
    popupWindow.setWidth(400);
    popupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) 
            switch (position)
                case 0:
                    devicesAdapter.setSelectedLeftPosition(devicesList.getChildAdapterPosition(anchor));
                    break;
                case 1:
                    devicesAdapter.setSelectedRightPosition(devicesList.getChildAdapterPosition(anchor));
                    break;
                default:
                    break;
            
            runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    devicesAdapter.notifyDataSetChanged();
                
            );
            popupWindow.dismiss();
        
    );
    popupWindow.show();

El camino de Kotlin

fun showPopupMenu(view: View) 
    PopupMenu(view.context, view).apply 
                menuInflater.inflate(R.menu.popup_men, menu)
                setOnMenuItemClickListener  item ->
                    Toast.makeText(view.context, "You Clicked : " + item.title, Toast.LENGTH_SHORT).show()
                    true
                
            .show()

ACTUALIZAR: En el código anterior, la función de aplicación devuelve this que no es obligatorio, por lo que podemos usar run que no devuelven nada y para hacerlo aún más simple, también podemos eliminar las llaves del método showPopupMenu.

Aún más simple:

fun showPopupMenu(view: View) = PopupMenu(view.context, view).run 
            menuInflater.inflate(R.menu.popup_men, menu)
            setOnMenuItemClickListener  item ->
                Toast.makeText(view.context, "You Clicked : $item.title", Toast.LENGTH_SHORT).show()
                true
            
            show()
        

Al final de todo puedes encontrar las crónicas de otros programadores, tú también eres capaz dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *