Mani Sankar
Mani Sankar

Reputation: 821

Inflated layout's children overlapping with each other when adding them to a TableRow

I am trying to inflate a layout which contains a few textViews. When I add that to a tableRow, the textViews inside that layout are getting overlapped. In another words, the layout_width and layout_height are being ignored I guess.

But when I add rowView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); after inflating, nothing is appearing.

TableRow tableRow = new TableRow(this);
TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
tableRow.setLayoutParams(lp);

View rowView = getLayoutInflater().inflate(R.layout.layout_result_row, null);
rowView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
loadResultRow(rowView, result); //This method sets the text of the textViews
tableRow.addView(rowView);
tableLayout.addView(tableRow);

layout_result_row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/results_row_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="16dp">

    <TextView
        android:id="@+id/results_row_match_no"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_turn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/results_row_match_no"
        android:layout_alignParentEnd="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_teams"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/results_row_match_no"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_turn_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/results_row_turn"
        android:layout_toStartOf="@+id/results_row_turn"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_toss_ml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/results_row_match_no"
        android:layout_marginTop="22dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_home_ml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/results_row_toss_ml"
        android:layout_alignBottom="@+id/results_row_toss_ml"
        android:layout_centerHorizontal="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_rank_ml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/results_row_home_ml"
        android:layout_toEndOf="@+id/results_row_turn_text"
        android:text="TextView" />

    <TextView
        android:id="@+id/results_row_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/results_row_turn_text"
        android:layout_alignStart="@+id/results_row_home_ml"
        android:text="TextView" />
</RelativeLayout>

Upvotes: 0

Views: 127

Answers (2)

Vinod
Vinod

Reputation: 88

The inflated layout already has the Layout Params all the chid views are not redraw with the new Layout params. If you want to have the views same as before after you inflate you can use the below code.enter image description here

 TableLayout tableLayout = new TableLayout(getApplicationContext());
    tableLayout.setBackgroundColor(Color.RED);
    TableRow tableRow = new TableRow(this);
    TableRow.LayoutParams lp = new 
   TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT);
    tableRow.setLayoutParams(lp);

    View rowView = getLayoutInflater().inflate(R.layout.activity_main, null);
    tableLayout.setStretchAllColumns(true);
   // rowView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
   // loadResultRow(rowView, result); //This method sets the text of the textViews
    tableRow.addView(rowView);
    tableLayout.addView(tableRow);
    setContentView(tableLayout);

Upvotes: 1

azizbekian
azizbekian

Reputation: 62189

Instead of:

TableRow.LayoutParams lp = new TableRow.LayoutParams(
                   TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);

Try:

TableLayout.LayoutParams lp = new TableLayout.LayoutParams(
             TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);

Upvotes: 0

Related Questions