2012-03-26 9 views
10

Implementé PopupMenu para un menú que se muestra después de presionar un elemento en la barra de acciones. Me pregunto qué alternativas hay para las versiones de SDK antes de las 11?Alternativa adecuada para PopupMenu para pre-Honeycomb

Posiblemente use algo parecido a un menú contextual. ¿Cuáles son tus pensamientos?

Mi implementación actual, sin embargo, es cargar una nueva actividad con los elementos del menú.

+1

Aparecería un 'AlertDialog' con' CHOICE_MODE_SINGLE'. – sastraxi

+0

¡Estoy haciendo algo similar AQUÍ! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Respuesta

13

Como se sugirió @sastraxi, una buena solución es usar AlertDialog con CHOICE_MODE_SINGLE.

AlertDialog.Builder builder = new AlertDialog.Builder(MyAndroidAppActivity.this); 
builder.setTitle("Pick color"); 
builder.setItems(R.array.colors, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      // The 'which' argument contains the index position 
      // of the selected item 
     } 
}); 
builder.setInverseBackgroundForced(true); 
builder.create(); 
builder.show(); 

Y el archivo strings.xml.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="colors"> 
     <item >blue</item> 
     <item >white</item> 
    </string-array> 
</resources> 

Referencia: Adding a List

+1

Esto funciona realmente bien :) –

7

Alternativamente, se puede utilizar un floating context menu.


(3 años más tarde, en realidad lee que el menú contextual flotante sólo funciona para los clics largos y rápidamente edita respuesta).

Se necesitaría registrar su visión para el menú contextual, abra el menú, a continuación, anular el registro (de modo que a largo clics en el elemento de acción no provocó de nuevo):

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.my_menu_item) { 
     View view = item.getActionView(); 
     registerForContextMenu(view); 
     openContextMenu(view); 
     unregisterForContextMenu(view); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

y por supuesto, implementar onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) según la documentación vinculada.

La mejor opción sería, como escribió OP, utilizar un AlertDialog en este caso particular si desea un diálogo centrado, o PopupMenu si desea que el menú se ancle al elemento de acción. Sin embargo, el menú emergente puede ser extraño, porque se sentirá como un menú de desbordamiento.

+0

OP, creo que su respuesta fue mejor para su caso de uso, dado que los menús contextuales flotantes son solo se activó en una pulsación larga sin el truco que agregué arriba. – ataulm

+0

Muy bien. Me he vuelto a aceptar a mí mismo. Gracias por mantener sus respuestas :) –