2012-06-27 12 views
8

Tengo un GridView y cada celda tiene un ImageView con TextView debajo de él. Desafortunadamente, si el TextView tiene más de una línea, el texto se corta. He intentado todo, pero no puedo encontrar una solución.Gridview multiline Textview corte

Parece que la altura de fila del GridView es el problema y no el texto real porque puede ver la mitad del texto en el Textview.

Aquí está mi código:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    GridView gridView = (GridView) findViewById(R.id.gridView1); 
    gridView.setAdapter(new ImageAdapter()); 

    gridView.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
      startActivity(new Intent(Main.this, Acronyms.class)); 
     } 

    }); 
} 

public class ImageAdapter extends BaseAdapter { 

    private Integer[] iconImg = { 
      R.drawable.acronyms, R.drawable.acronyms, 
      R.drawable.acronyms 
    }; 
    private String[] iconTitle = { 
      "Acronyms", "Cardiac Strips", 
      "Test 3" 
    }; 

    public int getCount() { 
     return iconImg.length; 
    } 

    public Object getItem(int arg0) { 
     return null; 
    } 

    public long getItemId(int arg0) { 
     return 0; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflater = getLayoutInflater(); 
      view = inflater.inflate(R.layout.icon, null); 
      TextView textView = (TextView) view.findViewById(R.id.icon_text); 
      textView.setText(iconTitle[position]); 
      ImageView imageView = (ImageView) view.findViewById(R.id.icon_image); 
      imageView.setImageResource(iconImg[position]); 

     } else { 
      view = convertView; 
     } 

     return view; 
    } 
} 

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#a3e6ff" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:paddingBottom="10dp" 
     android:paddingTop="10dp" 
     android:shadowDx="0" 
     android:shadowDy="0" 
     android:shadowRadius="25" 
     android:text="Example" 
     android:textColor="#248fb7" 
     android:textSize="40dp" 
     android:typeface="serif" android:gravity="center_horizontal"/> 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:columnWidth="90dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="15dp" > 
    </GridView> 

</LinearLayout> 

y mi icon.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_icon_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/icon_image" 
     android:layout_width="90dp" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:id="@+id/icon_text" 
     android:layout_width="90dp" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:maxLines="2" 
     android:singleLine="false" 
     android:text="Samples Samples" 
     android:textColor="#FFFFFF" 
     android:textSize="15dp" 
     android:typeface="serif" /> 

</LinearLayout> 

Y aquí está una captura de pantalla: Multi-line cut off

+0

estoy teniendo el mismo problema ! Increíblemente molesto! –

Respuesta

2

[EDIT1]

Puede intentar usar un RelativeLayout en lugar de un diseño lineal para el archivo icon.xml.

Si esto no funciona, entonces me movería a una altura estática de TextView. Al mirar su captura de pantalla, parece que siempre usará la misma imagen, y el texto va a ser de 1 línea o 2. Simplemente haga que la altura del texto sea estática para permitir 2 líneas.

[ORIGINAL] Creo que el problema está en la definición de disposición lineal para su icon.xml. En su definición, tiene el diseño que tiene "match_parent" como los parámetros de ancho y alto. Debería, dado que estas deben ser esencialmente subvistas dentro de gridview ser "wrap_content". Esto es lo que creo que debería ser

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/grid_icon_layout"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:gravity="center_horizontal"  
    android:orientation="vertical" > 

    <ImageView android:id="@+id/icon_image"   
     android:layout_width="90dp"   
     android:layout_height="wrap_content" />  

    <TextView android:id="@+id/icon_text"   
     android:layout_width="90dp"   
     android:layout_height="wrap_content"   
     android:gravity="center_horizontal"   
     android:maxLines="2"   
     android:singleLine="false"   
     android:text="Samples Samples"   
     android:textColor="#FFFFFF"   
     android:textSize="15dp"   
     android:typeface="serif" /> 

</LinearLayout> 
+0

¡Gracias por la respuesta rápida! Intenté esto y todavía obtengo el mismo resultado. – meepz

+0

Terminé teniendo que establecer explícitamente el alto del TextView en el archivo icon.xml. Intenté relativo y lineal y sin suerte. El GridView debe tener problemas de renderizado ya que el primer elemento en la cuadrícula es una sola línea, probablemente se ajuste a la altura de esos elementos. – meepz

+0

Creo que lo que ocurre es que los subdispositivos generales terminan con diferentes alturas dentro de la vista de cuadrícula (es decir, cada elemento de cuadrícula puede tener una altura diferente). De hecho, no sé cómo está programado el código de fondo de la GridView, pero me pregunto si primero debe definir su elemento de texto de dos líneas, si se dimensionaría adecuadamente ??? ¡Puede tener algo que ver con eso usando el primero para la dimensión de altura y nunca más después! – trumpetlicks

5

que resuelven utilizando, cuando me defino

TextView.setLines(2); 

en el xml el TextView es

android:layout_width="wrap_content" 
    android:layout_height="wrap_content"