tableRow entries go off screen

1.5k views Asked by At

I am using a table layout to show information based on a user specifications. The user enters data into a database, then this data is taken and displayed on a table were each row has 3 textView entries. The problem is that if the data entered by the user is to long, it goes off screen and is not visible. Any ideas? The code I used to do this is below:

xml

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="*"
    android:id="@+id/tl">
<TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="1dp" >

        <TextView
            android:id="@+id/timeCol"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Time"
            android:textSize="20sp"
            android:textStyle="bold"
            android:textColor="#FF0000"/>

        ....

    </TableRow>          
</TableLayout>

Java

 for (final String time : timesArray) 
    {
        i++;
        TableRow row1= new TableRow(this);

        event = db.getEvent(i, gameId);
        player = db.getPlayer(i, gameId);

        TextView timeRow = new TextView(this);
        TextView playerRow = new TextView(this);
        TextView eventRow = new TextView(this);

        timeRow.setText(time);
        timeRow.setTextColor(Color.WHITE);
        playerRow.setText(player);
        playerRow.setTextColor(Color.WHITE);
        eventRow.setText(event);
        eventRow.setTextColor(Color.WHITE);

        row1.addView(timeRow);
        row1.addView(playerRow);
        row1.addView(eventRow);

        tl.addView(row1);  
    }

And it looks like this if the data is too longenter image description here

1

There are 1 answers

0
Donnacha On

SOLUTION!

Setting layout_width to 0 and then assigning layout_weight to a float based on the amount of the screen you want a column to take up (For example, 0.5 would let the column take up half the screen) allows all the information to be shown on the screen. The code to do this is below.

XML

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tl">

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="1dp" >

        <TextView
            android:id="@+id/timeCol"
            android:layout_width="0px"
            android:layout_weight="0.2"
            android:layout_height="wrap_content"
            android:text="Time"/>

        <TextView
            android:id="@+id/playerCol"
            android:layout_width="0px"
            android:layout_weight="0.4"
            android:layout_height="wrap_content"
            android:text="Player"/>

        <TextView
            android:id="@+id/eventCol"
            android:layout_width="0px"
            android:layout_weight="0.4"
            android:layout_height="wrap_content"
            android:text="Event"/>

    </TableRow>          

java

TableLayout tl = (TableLayout) findViewById(R.id.tl);
TableRow row1= new TableRow(this);

TextView timeRow = new TextView(this);
TextView playerRow = new TextView(this);
TextView eventRow = new TextView(this);

TableRow.LayoutParams text1Params = new TableRow.LayoutParams();
        text1Params.width = 0;
        text1Params.weight = (float) 0.2;
        TableRow.LayoutParams text2Params = new TableRow.LayoutParams();
        text2Params.weight = (float) 0.4;
        text2Params.width = 0;
        TableRow.LayoutParams text3Params = new TableRow.LayoutParams();
        text3Params.weight = (float) 0.4;
        text3Params.width = 0;

        timeRow.setLayoutParams(text1Params);
        playerRow.setLayoutParams(text2Params);
        eventRow.setLayoutParams(text3Params);

        row1.addView(timeRow);
        row1.addView(playerRow);
        row1.addView(eventRow);

        tl.addView(row1, params);