2012-06-27 10 views
8

I have a GridView e ogni cella ha un ImageView con TextView sotto esso. Sfortunatamente se lo TextView ha più di una riga il testo viene troncato. Ho provato tutto ma non riesco a trovare una soluzione.Gridview multilinea Textview cut off

Sembra che l'altezza della riga di GridView rappresenti il ​​problema e non il testo effettivo perché è possibile vedere metà del testo nello Textview.

Ecco il mio codice:

@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> 

e la mia 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> 

Ed ecco uno screenshot: Multi-line cut off

+0

Sto avendo lo stesso identico problema ! Incredibilmente fastidioso! –

risposta

2

[EDIT1]

Si potrebbe provare a utilizzare un RelativeLayout anziché un layout lineare per icon.xml.

Se questo non funziona, quindi passerei a un'altezza statica TextView. Guardando il tuo screenshot, sembra che tu userai sempre la stessa immagine, e il testo sarà di 1 riga o 2. Rendi statico il testo in altezza per consentire 2 linee.

[ORIGINALE] Penso che il problema sia nella definizione del layout lineare per icon.xml. Nella tua definizione, hai il layout con "match_parent" come parametri di larghezza e altezza. Dovresti, dal momento che questi devono essere essenzialmente subviews all'interno di gridview essere "wrap_content". Ecco quello che penso che dovrebbe essere

<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

Grazie per la rapida risposta! Ho provato questo e sto ancora ottenendo lo stesso risultato però. – meepz

+0

Alla fine ho dovuto impostare esplicitamente l'altezza di TextView nel file icon.xml. Ho provato il relativo e lineare e senza fortuna. GridView deve avere problemi di rendering dal momento che il primo elemento della griglia è una singola riga, probabilmente va da quell'altezza degli elementi. – meepz

+0

Penso che ciò che accade sia che i sub-layout generali finiscano con altezze diverse all'interno della griglia (cioè ogni elemento della griglia potrebbe avere un'altezza diversa). In realtà non so come sia programmato il codice di background di GridView, ma mi chiedo se dovessi prima definire la tua voce di testo a 2 righe, se fosse dimensionata in modo appropriato ??? Potrebbe avere qualcosa a che fare con esso usando il primo per la dimensione dell'altezza e non aggiornandolo in seguito !!! – trumpetlicks

5

ho risolto utilizzando, quando ho definisco

TextView.setLines(2); 

nel xml TextView è

android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
Problemi correlati