studio para menus inflar ejemplos desplegable contextual java android option menuitem

java - para - android: cambio de elementos de menú de opciones mediante programación



menus en android ejemplos (10)

¿Es posible cambiar los elementos del menú de opciones mediante programación? ¿Alguien puede darme un ejemplo, por favor? Además, quiero desactivar ciertos elementos para que no escuchen los clics, ¿es posible?

Gracias.



Para cualquiera, necesita cambiar las opciones del menú dinámicamente:

private Menu menu; // ... @Override public boolean onCreateOptionsMenu(Menu menu) { this.menu = menu; getMenuInflater().inflate(R.menu.options, menu); return true; } // ... private void hideOption(int id) { MenuItem item = menu.findItem(id); item.setVisible(false); } private void showOption(int id) { MenuItem item = menu.findItem(id); item.setVisible(true); } private void setOptionTitle(int id, String title) { MenuItem item = menu.findItem(id); item.setTitle(title); } private void setOptionIcon(int id, int iconRes) { MenuItem item = menu.findItem(id); item.setIcon(iconRes); }


Para deshabilitar ciertos elementos:

MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML); item.setEnabled(false);


Prueba este código:

@Override public boolean onPrepareOptionsMenu(Menu menu) { this.menu=menu; updateMenuItems(menu); return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.document_list_activity_actions, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items if (item.getItemId() == android.R.id.home) { onHomeButtonPresssed(); }else if (item.getItemId() == R.id.action_delete) { useCheckBoxAdapter=false; deleteDocuments(); } else if (item.getItemId() == R.id.share) { useCheckBoxAdapter=false; shareDocuments(); } else if (item.getItemId() == R.id.action_tick) { useCheckBoxAdapter=true; onShowCheckboxes(); } updateMenuItems(menu); return true; } private void updateMenuItems(Menu menu){ if (useCheckBoxAdapter && menu != null) { menu.findItem(R.id.action_delete).setVisible(true); menu.findItem(R.id.share).setVisible(true); menu.findItem(R.id.action_tick).setVisible(false); } else { menu.findItem(R.id.action_delete).setVisible(false); menu.findItem(R.id.share).setVisible(false); menu.findItem(R.id.action_tick).setVisible(true); } invalidateOptionsMenu(); }


Puedes hacer algo tan simple como yo. Simplemente cambie el texto a lo que se necesita cuando se toca el elemento del menú. Necesitaba activar y desactivar el sonido, además de la capacidad de realizar una acción tocándolo. Aquí está mi código:

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.audioOn: audioOn = !audioOn; if (audioOn) item.setTitle("Audio Off"); else item.setTitle("Audio On"); return true; case R.id.touchOn: touchOn = !touchOn; if (touchOn) item.setTitle("Touch Off"); else item.setTitle("Touch On"); return true; default: return super.onOptionsItemSelected(item); } }

audioOn y touchOn son booleanos marcados en otras partes del código. Espero que esto ayude.


Si tengo que cambiar el contenido de mi menú de opciones, lo realizo durante onMenuOpened (). Esto me permite verificar el estado de ejecución en el momento en que el usuario accede al menú.

public boolean onMenuOpened(int featureid, Menu menu) { menu.clear(); if (!editable) { MenuItem itemAdd = menu.add(0, REASSIGN, Menu.NONE, context.getString(R.string.reassign)); MenuItem itemMod = menu.add(1, EDIT, Menu.NONE, context.getString(R.string.modify)); MenuItem itemDel = menu.add(2, DELETE, Menu.NONE, context.getString(R.string.delete)); itemAdd.setShortcut(''0'', ''a''); itemMod.setShortcut(''1'', ''m''); itemDel.setShortcut(''2'', ''d''); } else { MenuItem itemSave = menu.add(3, SAVE, Menu.NONE, context.getString(R.string.savechanges)); itemSave.setShortcut(''0'', ''S''); } return true; }


menu.xml

<item android:id="@+id/item1" android:title="your Item"> </item>

poner en su archivo java

public void onPrepareOptionsMenu(Menu menu) { menu.removeItem(R.id.item1); }


usando las siguientes líneas que he hecho para agregar los valores en el menú

getActivity().invalidateOptionsMenu();

prueba este trabajo como un encanto para mí.


usted puede realizar su tarea simplemente implementando lo siguiente:

private Menu menu; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.drive_menu, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { this.menu = menu; return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_toggle_grid) { handleMenuOption(id); return true; } else if(id == R.id.action_toggle_list){ handleMenuOption(id); return true; } return super.onOptionsItemSelected(item); } private void handleMenuOption(int id) { MenuItem item = menu.findItem(id); if (id == R.id.action_toggle_grid){ item.setVisible(false); menu.findItem(R.id.action_toggle_list).setVisible(true); }else if (id == R.id.action_toggle_list){ item.setVisible(false); menu.findItem(R.id.action_toggle_grid).setVisible(true); } }


En caso de que tengas una BottomBar:

@Override public boolean onCreateOptionsMenu(Menu menu) { if (mBottomBar.getCurrentTabId() == R.id.tab_more) { getMenuInflater().inflate(R.menu.more_menu, menu); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.preferences: startActivity(new Intent(this, PreferenceActivity.class)); break; } return super.onOptionsItemSelected(item); }

Entonces solo necesitas llamar:

@Override public void onBottomBarClick(int tabId) { supportInvalidateOptionsMenu(); }