2012-06-27 3 views
8

У меня есть GridView, и каждая ячейка имеет ImageView с TextView под ним. К сожалению, если TextView имеет более одной строки, текст отключается. Я пробовал все, но не могу найти решение.Gridview multiline Textview cut off

Похоже, что высота строки GridView является проблемой, а не фактическим текстом, потому что вы можете видеть половину текста в Textview.

Вот мой код:

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

и мой 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> 

А вот скриншот: Multi-line cut off

+0

У меня точно такая же проблема ! Невероятно раздражает! –

ответ

2

[EDIT1]

Вы можете попробовать использовать RelativeLayout вместо Linear Layout для icon.xml.

Если это не работает, тогда я бы переместился на статическую высоту TextView. Посмотрев на свой скриншот, похоже, что вы всегда будете использовать одно и то же изображение, и текст будет либо 1 строкой, либо 2. Просто сделайте текст высотой статическим, чтобы разрешить 2 строки.

[ORIGINAL] Я думаю, что проблема заключается в определении линейного макета для вашего icon.xml. В вашем определении у вас есть макет, имеющий «match_parent» в качестве параметров ширины и высоты. Вы должны, так как это, по сути, быть subviews в gridview, будет «wrap_content». Вот что я думаю, что это должно быть

<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

Спасибо за быстрый ответ! Я попробовал это, но я все равно получаю тот же результат. – meepz

+0

Мне пришлось явно установить высоту TextView в файле icon.xml. Я пробовал относительный и линейный и не повезло. У GridView должно возникнуть проблема с рендерингом, поскольку первый элемент в сетке - это одна строка, вероятно, эта высота элементов. – meepz

+0

Я думаю, что происходит то, что общие подмакеты заканчиваются разными высотами в сетке (т. Е. Каждый элемент сетки может иметь разную высоту). Я действительно не знаю, как запрограммирован фоновый код GridView, но я задаюсь вопросом, нужно ли сначала определить ваш 2-строчный текстовый элемент, если он будет соответствующим образом соответствовать? Это может иметь какое-то отношение к нему, используя первый для измерения высоты и никогда не обновляющийся после этого !!! – trumpetlicks

5

Я решил с помощью, когда я определить его

TextView.setLines(2); 

в XML-TextView является

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