Buscar..


Sintaxis

  • inflater.inflate (R.menu.your_xml_file, menu);

Parámetros

Parámetro Descripción
inflate(int menuRes, Menu menu) Inflar una jerarquía de menús del recurso XML especificado.
getMenuInflater () Devuelve un MenuInflater con este contexto.
onCreateOptionsMenu (Menu menu) Inicialice los contenidos del menú de opciones estándar de la Actividad. Debe colocar los elementos de su menú en el menú.
onOptionsItemSelected (MenuItem item) Este método se llama siempre que se selecciona un elemento en su menú de opciones

Observaciones

Para saber más sobre los menús , lea esto . ¡Espero eso ayude!

Menú de opciones con separadores.

En Android hay un menú de opciones por defecto, que puede tomar varias opciones. Si es necesario mostrar un número mayor de opciones, entonces tiene sentido agrupar esas opciones para mantener la claridad. Las opciones pueden agruparse colocando separadores (es decir, líneas horizontales) entre ellas. Para permitir divisiones, se puede utilizar el siguiente tema:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">@color/black</item>
    <item name="android:dividerHeight">1dp</item>
</style>

Al cambiar el tema, se pueden agregar divisiones a un menú.

Aplicar fuente personalizada al menú

public static void applyFontToMenu(Menu m, Context mContext){
    for(int i=0;i<m.size();i++) {
        applyFontToMenuItem(m.getItem(i),mContext);
    }
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
    if(mi.hasSubMenu())
        for(int i=0;i<mi.getSubMenu().size();i++) {
            applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
        }
    Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
    SpannableString mNewTitle = new SpannableString(mi.getTitle());
    mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    mi.setTitle(mNewTitle);
}

y luego en la Actividad:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    applyFontToMenu(menu,this);
    return true;
}

Creando un Menú en una Actividad


Para definir su propio menú, cree un archivo XML dentro del directorio res/menu/ del proyecto y cree el menú con los siguientes elementos:

  • <menu> : define un menú, que contiene todos los elementos del menú.
  • <item> : crea un MenuItem, que representa un solo elemento en un menú. También podemos crear un elemento anidado para crear un submenú.

Paso 1:

Crea tu propio archivo xml de la siguiente manera:

En res/menu/main_menu.xml :

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

Paso 2:

Para especificar el menú de opciones, anule onCreateOptionsMenu() en su actividad .

En este método, puede inflar su recurso de menú (definido en su archivo XML, es decir, res/menu/main_menu.xml )

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

Cuando el usuario selecciona un elemento del menú de opciones, el sistema llama al método onOptionsItemSelected() anulado de su actividad .

  • Este método pasa el MenuItem seleccionado.
  • Puede identificar el elemento llamando a getItemId() , que devuelve la ID única para el elemento de menú (definida por el android:id attribute en el recurso de menú - res/menu/main_menu.xml ) * /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

¡Terminando!

Su código de Activity debe verse como a continuación:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Captura de pantalla de cómo se ve tu propio menú:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow