titulo studio personalizar icono example cambiar boton bar agregar android android-actionbar

android - studio - Cambiar íconos en ActionBar dinámicamente



personalizar action bar android studio (6)

En lugar de eliminarlos, puede ocultar el botón que no desea mostrar.

Por ejemplo:

private boolean isPlaying; MenuItem mPlayMenuItem; MenuItem mPauseMenuItem; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbarlogic, menu); mPlayMenuItem = menu.findItem(R.id.action_play); mPauseMenuItem = menu.findItem(R.id.action_pause); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_play: isPlaying = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { this.invalidateOptionsMenu(); } return true; case R.id.action_pause: isPlaying = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { this.invalidateOptionsMenu(); } return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onPrepareOptionsMenu (Menu menu) { super.onPrepareOptionsMenu(menu); if (isPlaying) { mPlayMenuItem.setVisible(false); // hide play button mPauseMenuItem.setVisible(true); // show the pause button } else if (!isPlaying) { mPlayMenuItem.setVisible(true); // show play button mPauseMenuItem.setVisible(false); // hide the pause button } return true; }

Solo una nota, esto:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { this.invalidateOptionsMenu(); }

es necesario para actualizar la barra de acciones. Después de 3.0 dispositivos, la barra de acciones no se actualiza automáticamente. Por lo tanto, debe indicarle manualmente que llame a "OnPrepareOptionsMenu (Menu)" para que actualice los elementos llamando al "Activity.invalidateOptionsMenu ()".

¡Espero que esto ayude!

Referencia: http://developer.android.com/reference/android/app/Activity.html#onPrepareOptionsMenu(android.view.Menu)

http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#invalidateOptionsMenu(android.app.Activity)

Tengo una Activity que tiene una ActionBar pero necesito cambiar dinámicamente los iconos de la ActionBar , tengo una pausa y un botón de reproducción y necesito reemplazar el botón de reproducción con el botón de pausa mientras el usuario hace clic en él. He buscado y lo encontré:

@Override public boolean onCreateOptionsMenu(Menu menu) { if(DEBUG) Log.i("onCreateOptionsMenu()", "onCreateOptionsMenu() -> LogicAnalizerView"); //menu.add("").setIcon(R.drawable.pause).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbarlogic, menu); menu.removeItem(R.id.pauseLogic); return true; }

Así que de esta manera elimino el botón Pausa y puedo agregarlo también, pero solo ocurre cuando inicio la Activity y se dibuja la ActionBar . ¿Cómo puedo obligar a volver a dibujar ActionBar ? Además, de esta forma, se vuelve a dibujar toda la ActionBar . ¿Está bien? ¿Hay alguna manera de volver a dibujar solo el botón / icono que quiero?

Gracias :)


Si desea obtener el primer elemento de su menú, **

use menu.getItem(0);

este Código funciona perfectamente:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.my_menu, menu); MenuItem m = menu.getItem(0); m.setIcon(R.drawable.your_icon_here); } return true; }


Tendrá que guardar una referencia al MenuItem después de inflar. Entonces algo como lo siguiente:

public boolean onCreateOptionsMenu( Menu menu ) { MenuInflater inflater = getMenuInflater(); inflater.inflate( R.menu.actionbarlogic, menu ); playMenu = menu.findItem(R.id.playMenu); updatePlayStatus(); return menu; } public void updatePlayStatus() { if( playService.isConnected() ) { playService.isPlaying() ? playMenu.setIcon(R.drawable.pause) : playMenu.setIcon(R.drawable.play); } }

Entonces puedes consultar el playMenu en cualquier momento. Por lo tanto, puede modificar el elemento diciendo que su reproductor termina de reproducirse y debe volver a un icono de reproducción.


Use el método invalidateOptionsMenu ().

private boolean isPlaying; public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbarlogic, menu); if (isPlaying) menu.removeItem(R.id.play_button); else menu.removeItem(R.id.pause_button); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.play_button: // Do what the play button should do here isPlaying = true; break; case R.id.pause_button: // Do what the pause button should do here isPlaying = false; break; } invalidateOptionsMenu(); return true; }


onPrepareOptionsMenu el onPrepareOptionsMenu en su clase de actividad y luego puede agregar / eliminar elementos del menú visibles / invisibles.


private Menu mMenu; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main_activity, menu); // Save the menu reference mMenu = menu; return super.onCreateOptionsMenu(menu); } // For example - Call when you need to change icon private void setActionIcon(boolean showWithBadge) { MenuItem item = mMenu.findItem(R.id.ITEM_ID); if(mMenu != null) { if(showWithBadge) { item.setIcon(R.drawable.IC_WITH_BADGE); } else { item.setIcon(R.drawable.IC_WITHOUT_BADGE); } } }