2012-06-27 15 views
8

Mam GridView i każda komórka ma pod nią z TextView. Niestety, jeśli TextView ma więcej niż jedną linię, tekst zostanie odcięty. Próbowałem wszystkiego, ale nie mogę znaleźć rozwiązania.Gridview multiline Textview cut off

Wygląda na to, że wysokość wiersza GridView jest problemem, a nie faktycznym tekstem, ponieważ widać połowę tekstu w Textview.

Oto mój kod:

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

i mój 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> 

I tu jest zrzut ekranu: Multi-line cut off

+0

Mam dokładnie ten sam problem ! Niewiarygodnie denerwujące! –

Odpowiedz

2

[EDIT1]

Możesz spróbować użyć RelativeLayout zamiast Linearnego układu dla icon.xml.

Jeśli to nie zadziała, to wtedy przeniesiemy się na wysokość TextView. Patrząc na zrzut ekranu, wygląda na to, że zawsze użyjesz tego samego obrazu, a tekst będzie miał 1 linię lub 2. Po prostu ustaw wysokość tekstu na 2 linie.

[ORYGINALNY] Myślę, że problem tkwi w definicji układu liniowego dla pliku icon.xml. W twojej definicji masz układ zawierający "match_parent" jako parametry szerokości i wysokości. Powinieneś, ponieważ w zasadzie są to subviews w ramach gridview, które powinny być "wrap_content". Oto, co myślę, że powinno być

<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

Dzięki za szybką reakcję! Próbowałem tego i nadal otrzymuję ten sam wynik. – meepz

+0

Musiałem jawnie ustawić wysokość TextView w pliku icon.xml. Próbowałem względnie i liniowo i bez powodzenia. GridView musi mieć problemy z renderowaniem, ponieważ pierwszy element w siatce jest pojedynczą linią, prawdopodobnie idzie o wysokość tego elementu. – meepz

+0

Myślę, że to, co się dzieje, to, że ogólny układ podrzędny kończy się na różnych wysokościach w widoku siatki (to jest, że każdy element siatki może mieć inną wysokość). Właściwie to nie wiem, jak program w tle GridView jest zaprogramowany, ale zastanawiam się, czy najpierw zdefiniowałbyś swój tekst z 2 liniami, czy rozmiar byłby odpowiedni? Może mieć z tym coś wspólnego, używając pierwszego do wymiaru wysokości i nigdy go nie aktualizować !!! – trumpetlicks

5

postanowiłem użyciu, kiedy zdefiniować go

TextView.setLines(2); 

w XML TextView jest

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