2012-06-27 30 views
8

我有GridView,每個單元都有一個ImageView,TextView。不幸的是,如果TextView有不止一行,文本會被截斷。我嘗試了一切,但我找不到解決方案。Gridview多行文本視圖中斷

看起來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

[編輯1]

您可以嘗試使用RelativeLayout而不是線性佈局的icon.xml。

如果這不起作用,然後我會移動到靜態高度TextView。從看你的截圖,看起來你會總是使用相同的圖像,並且文本要麼是1行,要麼是2.只需讓文本高度爲靜態以允許2行。

[原文] 我認爲問題出在您的icon.xml的線性佈局定義中。在你的定義中,你的佈局具有「match_parent」作爲寬度和高度參數。你應該,因爲這些基本上是在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

我最終不得不在icon.xml文件中顯式設置TextView的高度。我嘗試了相對和線性,沒有運氣。由於網格中的第一項是單行,因此GridView必須有渲染問題,因此可能會出現該項高度。 – meepz

+0

我認爲會發生什麼是整個子佈局最終在gridview中具有不同的高度(即每個網格項可能有不同的高度)。我實際上不知道GridView的背景代碼是如何編程的,但我不知道是否要先定義你的2行文本項,如果它的大小適當的話?它可能與它有關,使用第一個用於高度維度,並且從不更新! – trumpetlicks

5

我解決了使用,當我把它定義

TextView.setLines(2); 

在XML中的TextView是

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