Menu de Opciones
Menu de Acciones
Fragmentos
Menu Contextual
Al menu de opciones se accede con el boton de hardware del equipo; o si es uno de los más nuevos donde ya no contamos con este botón, en la barra de accion (ActionBar) encontraremos un icon de tres puntos en linea vertical (se lo conoce como action-overflow). Incluso el mismo podría encontrarse en la barra de navegacion (NavigationBar)
- Definicion de Menu en los recursos
- Implementacion del metodo onCreateOptionsMenu
- Implementacion del metodo onOptionsItemSelected
La barra de acción viene a reemplazar a lo que era el menú de opciones. Y los ítems que vemos en la action bar son los mismo que tenemos en nuestro menú de opciones.
1 – Home Icon
2 – Titulo (y subtitulo)
3 – Action Ítems
4 – Action Overflow
Propiedades del XML:
- ifRoom: Si hay lugar
- withText: Icono + Texto (siempre que haya espacio)
- never: Nunca, o sea en el overflow-menu
- always: Siempre visible en la accion. No recomendado
Orden en Categoria: De menor a mayor, de izquierda a derecha. Si usan ifRoom, los de menor orden se muestran, los otros quedan ocultos
Recientemente, [Abril 2015] se deprecó la clase ActiionBarActivity que era la clase de la cual debía extender una Activity para incorporar la ActionBar. Y a partir de ese momento, se introdujo AppCompatActivity en su reemplazo.
ActionBar ab = getSupportActionBar();
// Aca arriba llamamos a get[SUPPORT]Actionbar porque usamos la libreria
// de compatibilidad. Si no la usaramos, el llamado solo seria getActionBar
ab.setTitle("TITULO"); // Seteamos el titulo
ab.setSubtitle("Subtitulo"); // Seteamos Subtitulo
// Si usamos la AppCompatActivity, por defecto no muestra el icono
ab.setIcon(R.mipmap.ic_launcher);
ab.setDisplayShowHomeEnabled(true);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
PlaceholderFragment miFragmento = new PlaceholderFragment();
ft.add(R.id.container, miFragmento);
ft.replace(R.id.container, miFragmento);
ft.addToBackStack(null);
ft.commit();
registerForContextMenu(btn);
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
}
public boolean onContextItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.borrar) {
Toast.makeText(getApplicationContext(), "Seleccionaste Borrar",
Toast.LENGTH_SHORT).show();
return true;
}
if (id == R.id.copiar) {
Toast.makeText(getApplicationContext(), "Seleccionaste Copiar",
Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
protected ActionMode mActionMode;
Button btnAM = (Button) findViewById(R.id.btnActionMode);
btnAM.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mActionMode == null){
// Solo ingreamos al modo si aun no estamos en él.
mActionMode = startSupportActionMode(myActionMode);
}
return false;
}
});
private ActionMode.Callback myActionMode = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int id = item.getItemId();
if (id == R.id.borrar) {
TOAST
mode.finish();
return true;
}
if (id == R.id.copiar) {
TOAST
mode.finish();
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}