Inserting TableRows into TableLayout programmatically – TextView inside TableRow won’t display

Okay, so I’m trying to insert TableRows into a TableLayout programmatically every time a button is tapped. Each of these rows contain a TextView set to some String. My problem is, that although the TableRow is inserted successfully, the text within the TextView that is itself inside the TableRow won’t show up.

Here is what I’m doing:

    //prepare TextView to put inside a TableRow
    TextView text = new TextView(MyClass.this);
    text.setText(someString);
    text.setTextSize(15);
    text.setTextColor(Color.parseColor("#FF9900"));
    text.setLayoutParams(new LayoutParams
            (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));


    //Prepare TableRow to be inserted
    TableRow row = new TableRow(MyClass.this);
    row.addView(text);
    row.setPadding(4,4,4,4);
    row.setGravity(Gravity.CENTER);
    row.setLayoutParams(new LayoutParams
            (LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

    //add row to the table
    someTableLayout.addView(row);

The result: A row is inserted, but I can’t see the text (I know the row is inserted since I can see the dividers between each row). I’m guessing it has something to do with the LayoutParams? I’m probably overlooking something very stupid… but I have no idea…

Screenshot after I click Roll which should insert a row with the string/TextView: enter image description here

The “Start By Rolling” TextView is the first row which I put in through the XML file. It displays fine, but the rows inserted programmatically don’t

Answer

First this is you have a TextView with height match_parent and a tablerow with height wrap_content so make TextView height to wrap_content as well.

And second assign appropriate LayoutParams for ex:

TextView text = new TextView(MyClass.this);
text.setText(someString);
text.setTextSize(15);
text.setTextColor(Color.parseColor("#FF9900"));
text.setLayoutParams(new TableRow.LayoutParams
        (LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));


//Prepare TableRow to be inserted
TableRow row = new TableRow(MyClass.this);
row.addView(text);
row.setPadding(4,4,4,4);
row.setGravity(Gravity.CENTER);
row.setLayoutParams(new TableLayout.LayoutParams
        (LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

//add row to the table
someTableLayout.addView(row);

Leave a Reply

Your email address will not be published. Required fields are marked *