Blog >Lista Soluciones >
Context Menu II
Context Menu con ImageView + texto por item
Continuamos con la extensión del post Menu Contextual, en esta ocasión vamos a hacer un contextMenu con una imagen por item.
Aunque lo usemos como ContextMenu, en realidad es un dialogo con una vista personalizada, vamos a utilizar un ListView.
Para seguir con este post es imprescindible tener un listview con imagen + texto, podreis encontrar el código necesario en este post anterior ListView
Una vez tengamos nuestro Listview, simplemente tenemos que convertir esa listview en un AlertDialog clicable, que hará la función de contextMenu. Hay que hacer este "apaño" porque la clase MenuContext no acepta imágenes, ya sea intentando ponerla desde XML como
Como he dicho anteriormente contamos con las siguientes clases y recursos del post ListView que las enumero a continuación:
Creamos la clase ContextMenuList, en la que jugamos con el adaptador MenuAdapter, para crear el Dialog con los elementos de su lista, es decir icono + texto:
Y nuestra actividad principal en la que sólo hemos colocado un botón para cuando hagamos click aparezca el context menu es así :
Pues ya tenemos nuestro Dialog camuflado de Menu Context y con todas sus funcionalidades
Y este es el resultado :
Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo.
Context Menu con ImageView + texto por item
Continuamos con la extensión del post Menu Contextual, en esta ocasión vamos a hacer un contextMenu con una imagen por item.
Aunque lo usemos como ContextMenu, en realidad es un dialogo con una vista personalizada, vamos a utilizar un ListView.
Para seguir con este post es imprescindible tener un listview con imagen + texto, podreis encontrar el código necesario en este post anterior ListView
Una vez tengamos nuestro Listview, simplemente tenemos que convertir esa listview en un AlertDialog clicable, que hará la función de contextMenu. Hay que hacer este "apaño" porque la clase MenuContext no acepta imágenes, ya sea intentando ponerla desde XML como
Como he dicho anteriormente contamos con las siguientes clases y recursos del post ListView que las enumero a continuación:
- elemento.java
- MenuAdapter.java
- itemlist.xml
- imágenes icon1, icon2, icon3
- iconomenujuego
Creamos la clase ContextMenuList, en la que jugamos con el adaptador MenuAdapter, para crear el Dialog con los elementos de su lista, es decir icono + texto:
public class ContextMenuList implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener{ private Context context; private String titulo; private ArrayListarraydir; private Activity a; int iconoid; MenuAdapter adaptador; //CONSTRUCTOR public ContextMenuList(Context c,String titulo,Activity a,int icon) { this.context=c; this.titulo=titulo; this.a=a; this.iconoid=icon; arraydir = new ArrayList (); } //CREAMOS LA LISTA DE LOS ELEMENTOS DEL MENU public void crearListaAdaptador(int recurso, String titulo){ elemento item; item = new elemento(context.getResources().getDrawable(recurso),titulo); arraydir.add(item); } //SE LLAMA UNA VEZ SE ACABA DE LLAMAR A LOS ITEMS public void adaptadorCompleto(){ adaptador= new MenuAdapter(a, arraydir); } //METODO QUE CREA EL ALERTDIALOG public Dialog createMenu() { final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(titulo); builder.setIcon(context.getResources().getDrawable(iconoid)); builder.setAdapter(adaptador, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialoginterface, int i) { elemento item = (elemento) adaptador.getItem(i); } }); builder.setInverseBackgroundForced(true); AlertDialog dialog = builder.create(); dialog.setOnCancelListener(this); dialog.setOnDismissListener(this); return dialog; } @Override public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub } @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub } }
Y nuestra actividad principal en la que sólo hemos colocado un botón para cuando hagamos click aparezca el context menu es así :
public class MainActivity extends Activity { private Button b1; private ContextMenuList MenuContextual; Dialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MenuContextual=new ContextMenuList(this, "Graficos", this,getResources().getIdentifier("iconomenujuego" , "drawable", getPackageName())); MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon1" , "drawable", getPackageName()), " Bitmaps"); MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon2" , "drawable", getPackageName()), " Vectorial"); MenuContextual.crearListaAdaptador(getResources().getIdentifier("icon3" , "drawable", getPackageName()), " 3D"); MenuContextual.adaptadorCompleto(); b1=(Button) findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog=MenuContextual.createMenu(); dialog.show(); } }); } }
Pues ya tenemos nuestro Dialog camuflado de Menu Context y con todas sus funcionalidades
Y este es el resultado :
Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo.