GridView con diferentes tamaños de columna

Intentando crear una lista de puntuaciones altas, que es desplazable, y se ve así:

foo 1000 bar 876 foobar 500 foobarfoo 1 

Actualmente lo estoy haciendo con un GridView. Me gustaría fijar el ancho de la columna de nombre al 60% de la pantalla y el ancho de la columna de puntuación al 40%. ¿Es posible?

Actualmente estoy tratando a través de un adaptador de costum. Aquí está la función getview para él:

 public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if (convertView == null) { tv = new TextView(context); tv.setTextSize(25); tv.setTextColor(Color.WHITE); if (position % 2 == 0) { tv.setLayoutParams(new GridView.LayoutParams((width/10)*6, 50)); } else { tv.setLayoutParams(new GridView.LayoutParams((width/10)*4, 50)); } } else { tv = (TextView) convertView; } tv.setText(texts[position]); return tv; } 

El diseño está construido por gridview y un botón en la parte inferior. El archivo XML es:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/top"> <GridView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="2" android:id="@+id/grid" android:numColumns="2" android:columnWidth="0dp" > </GridView> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/backbutton" android:text="@string/backstr"></Button> </LinearLayout> 

Así que la pregunta de nuevo: ¿Es posible establecer el GridView para dejar la adición de diferentes columnas de tamaño? Si es así, entonces mi enfoque es bueno? (Probablemente no, ya que no funciona :)) ¿Acabo de perder algo?

¡Gracias de antemano!

Tuvimos que hacer esto para un proyecto, y no queríamos usar nada más que un GridView porque la funcionalidad se repetía, pero en un GridView necesitábamos una configuración de vista ligeramente diferente (pero aún usando un adaptador y todo lo demás bueno ). Encontramos que PUEDE hacer esto si anula la función layoutChildren GridView , aunque está bastante mal documentada.

Nuestra implementación tiene un cheque para una vista especial y para si el nuevo diseño ya se ha implementado:

 @Override protected void layoutChildren(){ super.layoutChildren(); if(!isSpecial || layoutAlreadySet) return; layoutAlreadySet = true; //Implement special layout.... } 

Trabajando como un encanto! Muchas gracias a Abhinav, que hizo un buen consejo. Aquí está el código para todos los que tienen el mismo problema:

 public View getView(int position, View convertView, ViewGroup parent) { TextView tv1; TextView tv2; LinearLayout ll; if (convertView == null) { tv1 = new TextView(context); tv1.setTextSize(25); tv1.setTextColor(Color.WHITE); tv1.setGravity(Gravity.LEFT); tv1.setPadding(5, 5, 5, 5); tv1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT, (float) 3.0)); tv2 = new TextView(context); tv2.setTextSize(25); tv2.setTextColor(Color.WHITE); tv2.setGravity(Gravity.RIGHT); tv2.setPadding(5, 5, 5, 5); tv2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT, (float) 4.0)); ll = new LinearLayout(context); ll.setOrientation(0); ll.setPadding(5, 5, 5, 10); tv1.setText(names[position]); tv2.setText(scores[position]); ll.addView(tv1); ll.addView(tv2); } else { ll = (LinearLayout) convertView; tv1 = (TextView) ll.getChildAt(0); tv2 = (TextView) ll.getChildAt(1); tv1.setText(names[position]); tv2.setText(scores[position]); } return ll; } 

Y el archivo XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/top"> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="2" android:numColumns="2" android:columnWidth="0dp" android:id="@+id/list"> </ListView> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/backbutton" android:text="@string/back"></Button> </LinearLayout> 

Si crees que puedes mejorar este código (ya que soy un novato en este campo) no dudes, para responder! ¡Gracias por adelantado!

  • Cambiar el comportamiento de un GridView para que se desplace horizontalmente en lugar de verticalmente
  • Cómo pasar JSON Array utilizando objeto JSON
  • Cómo eliminar el espacio entre filas de vista de cuadrícula en android
  • GridView muestra sólo dos columnas
  • ¿Puedo evitar las llamadas getView () al medir un GridView?
  • Android - RecyclerView espaciado entre elementos en una cuadrícula
  • Cargar imágenes en GridView con Universal Image Loader
  • GridLayout (no GridView) cómo estirar todos los niños uniformemente
  • Problemas de diseño en diferentes pantallas
  • ¿Cómo obtengo la vista de cuadrícula dinámica android?
  • Creación de un libro que almacena la vista de cuadrícula en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.