gridview con imagen y texto android

Creé con éxito un gridview poblado con imágenes. Ahora, lo que quiero hacer es poner un texto debajo de la imagen.

Esta es la captura de pantalla de mi aplicación hasta ahora.

http://i203.photobucket.com/albums/aa266/paulocarabuena_bucket/screen-2.png

Aquí está mi método getView en mi clase imageadapter.

public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { imageView = new ImageView(this.context); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageResource(this.thumbs[position]); return imageView; } 

Aquí está el método onCreate de mi actividad principal

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.launchFullScreen(); this.setContentView(R.layout.main); this.grids = (GridView) this.findViewById(R.id.elements); ImageAdapter adapter = new ImageAdapter(this); this.grids.setAdapter(adapter); this.grids.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { } }); } 

Gracias por adelantado. 🙂

Puede hacerlo utilizando un XML, que define la celda GridView :

Image.xml

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <ImageView android:id="@+id/image" android:layout_marginBottom = "10dp" android:src="@drawable/cell_sfondo" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> </LinearLayout> 

Entonces en su getView() :

 if(convertView == null) { view = inflater.inflate(R.layout.image, null); } else view = convertView; ImageView image = (ImageView)view.findViewById(R.id.image); image.setImageResource(this.thumbs[position]); 

En lugar de utilizar directamente la vista de imagen, debe inflar una vista como se muestra a continuación:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widget44"android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_x="201px" android:layout_y="165px" android:gravity="center_horizontal"> <ImageView android:id="@+id/icon_image" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <TextView android:id="@+id/icon_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:gravity="center_horizontal" android:textColorHighlight="#656565"> </TextView> </LinearLayout> 

Y su adaptador debe ser como este:

 public class ImageAdapter extends BaseAdapter{ Context mContext; public static final int ACTIVITY_CREATE = 10; public ImageAdapter(Context c){ mContext = c; } @Override public int getCount() { // TODO Auto-generated method stub return 5; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v; if(convertView==null){ LayoutInflater li = getLayoutInflater(); v = li.inflate(R.layout.icon, null); TextView tv = (TextView)v.findViewById(R.id.icon_text); tv.setText("Profile "+position); ImageView iv = (ImageView)v.findViewById(R.id.icon_image); iv.setImageResource(R.drawable.icon); } else { v = convertView; } return v; } } 

Para más información consulte este post Custom Grid View

Paresh Mayani tiene un ejemplo muy bueno y sencillo. Esto me ayudó mucho.

http://www.technotalkative.com/android-gridview-example/

Puede crear un diseño para su imagen y texto en cada celda del diseño de cuadrícula. Y sugiero inflar el diseño de un xml. Puedes intentar hacer algo como esto:

 //Use a viewHolder to optimize the list ViewHolder holder = null; if (convertView == null) { //Create a new view holder to optimize the loading of elements in list holder = new ViewHolder(); convertView = LayoutInflater.from(this.context).inflate(R.layout.my_custom_xml,null) ; holder.imageView = (ImageView)convertView.findViewByID(R.id.my_image_view); holder.textView = (TextView)convertView.findViewByID(R.id.my_text_view); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } //Bind data to the row //Set the position in holder holder.position = position; //Set the image for each row holder.imageView ... //Set the text for each row holder.textView.setText()... //And the viewholder looks like this private class ViewHolder{ //The position of this row in list private int position; //The image view for each row private ImageView imageView; //The textView for each row private TextView textView; } 

Y ahora usted puede simplemente crear my_custom_xml que contienen la vista de texto y de imagen:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width= "fill_parent" android:layout_height = "wrap_content" android:orientation= "vertical"> <ImageView android:id = "@+id/my_image_view" android:layout_width = .... android:layout_height = ... /> <TextView android:id = "@+id/my_text_view" android:layout_width = .... android:layout_height = .... /> </LinearLayout> 

En lugar de tomar la imagen dinámica, puede inflate layout teniendo textview bajo imageview en adaptador como:

 if(convertView==null){ inflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); holder=new Holder(); convertView=inflater.inflate(R.layout.gridinflater, null); holder.imageView=(ImageView) convertView.findViewById(R.id.img); holder.textView=(TextView) convertView.findViewById(R.id.txt); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } 

donde gridInflater es layout teniendo textview bajo imageview en Relative Layout como padre.

 public static class Holder { public ImageViewProgress imageView; public TextView textView; } 
  • Android: Tire para actualizar para GridView
  • Hacer una vista de imagen extensible en gridview
  • Gridview mostrar de acuerdo a la altura real dentro de vista de desplazamiento
  • ¿Cómo calculo la altura requerida de un GridView que está dentro de un ScrollView en Android?
  • Cargando imágenes en un gridview con tarea asíncrona, no cargando correctamente
  • BaseAdapter y ContextMenu
  • Tire para actualizar en Android sin biblioteca popular
  • Cómo habilitar arrastrar y soltar en el elemento de GridView onClick ()
  • Problema de desplazamiento de GridView en Android
  • Cómo obtener el número de filas de un GridView?
  • Android - RecyclerView espaciado entre elementos en una cuadrícula
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.