¿Cómo agregar un botón de menú sin barra de acción?

4 minutos de lectura

Me gustaría agregar un botón de menú en la esquina superior derecha de mi aplicación y sin barra de acción, como está en la aplicación Google Fit en la captura de pantalla a continuación. ¿Alguien puede ayudarme?

botón de menú sin barra de acción

Avatar de usuario de Musa
musa

Simplemente puede usar PopupMenupor ejemplo, agregue lo siguiente a un botón al hacer clic:

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.actions, popup.getMenu());
    popup.show();
}

kotlin

fun showPopup(v : View){
   val popup = PopupMenu(this, v)
   val inflater: MenuInflater = popup.menuInflater
   inflater.inflate(R.menu.actions, popup.menu)
   popup.setOnMenuItemClickListener { menuItem ->
      when(menuItem.itemId){
         R.id.action1-> {
             
         }
         R.id.action2-> {

         }
      }
      true
   }
   popup.show()
}

Para más información, lea Creating a Popup Menu :
http://developer.android.com/guide/topics/ui/menus.html

  • ¿Dónde debo llamar a este método?

    – Jorge Saraiva

    11 de diciembre de 2017 a las 21:42

  • El elemento de escucha de clics se puede agregar de esta manera: popup.setOnMenuItemClickListener (nuevo PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.menuItem1: return true; default : falso retorno; } } });

    -Pranav Mahajan

    06/03/2018 a las 20:33

  • Utilizar popup.gravity = Gravity.END justo antes de inflarlo si desea que esté en el lado derecho de la pantalla (aparece a la izquierda para mí de manera predeterminada)

    – Quinn

    22 de enero de 2020 a las 14:36

  • @Quinn Parece que no es compatible antes del nivel de API 23. Sin embargo, puede pasar la gravedad como argumento del constructor: PopupMenu(this, v, Gravity.End)que es compatible.

    – Máx.

    3 de diciembre de 2020 a las 9:31


Avatar de usuario de Eugene H
eugenio h

Agregue una barra de herramientas al diseño y hágalo transparente. Esa es la mejor solución para agregar elementos de menú a un diseño y dar la apariencia de que no hay barra de acción/barra de herramientas.

Diseño

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The rest of your code here -->

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@android:color/transparent"/>

</RelativeLayout>

Temática

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
    </style>
</resources>

Ejemplo de inflar el menú, configurar el título, hacer clic en el menú oyente.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Toolbar");
toolbar.inflateMenu(R.menu.menu_main);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        if (item.getItemId() == R.id.action_refresh) {

        }
        return false;
    }
});

No establezca la barra de herramientas como la barra de acción. El tema simplemente lo elimina por completo.

  • tiene fondo blanco, no es transparente!

    – usuario924

    31 de octubre de 2018 a las 9:03

Avatar de usuario de Aashish Kumar
Aashish Kumar

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="https://stackoverflow.com/questions/30417223/@drawable/ic_overflow_holo_dark"
    android:contentDescription="@string/descr_overflow_button"
    android:onClick="showPopup" />

Agregue las líneas anteriores en el archivo xml donde desea mostrar este menú.

public void showMenu(View v) {

    PopupMenu popup = new PopupMenu(this, v);
    // This activity implements OnMenuItemClickListener
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.archive:
            archive(item);
            return true;
        case R.id.delete:
            delete(item);
            return true;
        default:
            return false;
    }
}

Para más detalles pasa por:
https://developer.android.com/guide/topics/ui/menus.html

  • onMenuItemClick no existe de que hablas

    – usuario25

    18 de febrero de 2018 a las 19:19

  • onMenuItemClick completamente funcionando hasta ahora. mira esto

    – Aashish Kumar

    19 de febrero de 2018 a las 14:28

No creo que puedas agregar un menú sin barra de acción. Pero, hay 2 enfoques en los que puedo pensar.

  1. Crea una barra de acción del mismo color que la del fondo para que no se vea, a continuación agrega los menús.

  2. Simplemente agregue un botón en la esquina superior derecha de la pantalla y coloque el menú desplegable en el diseño.

O use un menú emergente como lo sugiere @MY

¿Ha sido útil esta solución?