Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gridview multiline Textview cut off

I have a GridView and each cell has an ImageView with TextView under it. Unfortunately if the TextView has more than one line the text gets cut off. I have tried everything but I cant find a solution.

It seems that the row height of the GridView is the problem and not the actual text because you can see half of the text in the Textview.

Here is my code:

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

and my 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>

And here is a screenshot: Multi-line cut off

like image 312
meepz Avatar asked Jun 27 '12 14:06

meepz


2 Answers

I resolved using, when i define it

    TextView.setLines(2);

in the xml the textview is

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
like image 184
Boris Karloff Avatar answered Oct 21 '22 02:10

Boris Karloff


[EDIT1]

You could try using a RelativeLayout instead of a Linear Layout for the icon.xml.

If this doesnt work then I would then move to a static height TextView. From looking at your screenshot, it looks like you will always use the same image, and the text is either going to be 1 line or 2. Just make the text height static to allow for 2 lines.

[ORIGINAL] I think the problem is in your linear layout definition for your icon.xml. In your definition, you have the layout having "match_parent" as the width and height parameters. You should, since these are to essentially be subviews within the gridview be "wrap_content". Here is what I think it should be

<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>
like image 37
trumpetlicks Avatar answered Oct 21 '22 00:10

trumpetlicks