-1

My expected Output

This is referenced Image of what I want, But im unable to do it, currently im using tablelayout, what i should do? Ofcourse my total requirement are vertical and horizontal scrolling.

My current code is below with this I cant even have row of diff width, same width get applied to all below rows of column

/* create cell element - button */
        for (int i = 0; i < 14; i++) {

            if (i == 0) {
                TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(
                            100,
                        100);
//                tableRowParams.column=1;
//                tableRowParams.span=2;
                TableRow tableRow = new TableRow(this);
                View v = LayoutInflater.from(this).inflate(R.layout.item_header, tableRow, false);
                tableRow.setLayoutParams(tableRowParams);
                TextView tv_label = (TextView)v.findViewById(R.id.tv_label);
                LinearLayout ll_row = (LinearLayout)v.findViewById(R.id.ll_row);
                tv_label.setText("dynamic " + i);
                ll_row.setBackgroundColor(Color.parseColor("#6ab04c"));
//                ll_row.getLayoutParams().height = 100;
//                ll_row.getLayoutParams().width = 400;
//                ll_row.requestLayout();
                tableRow.addView(v);
                tableLayout.addView(tableRow);
            } else {
                TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
//                tableRowParams.column=1;
//                tableRowParams.span=1;

                TableRow tableRow = new TableRow(this);
                View v = LayoutInflater.from(this).inflate(R.layout.item_header, tableRow, false);
                tableRow.setLayoutParams(tableRowParams);
                TextView tv_label = (TextView)v.findViewById(R.id.tv_label);
                LinearLayout ll_row = (LinearLayout)v.findViewById(R.id.ll_row);
                tv_label.setText("dynamic " + i);
                ll_row.setBackgroundColor(Color.parseColor("#6ab04c"));
//                ll_row.getLayoutParams().height = 300;
//                ll_row.getLayoutParams().width = 200;
//                ll_row.requestLayout();
                tableRow.addView(v);
                tableLayout.addView(tableRow);
            }


        }

My current Output is this: My Current Output

1 Answers1

1

The answer is you cannot control the widths of individual cells on a row, the core concept of the TableView layout is that ALL cells in a column have the same width, thus you cannot individually adjust the width of a cell on a row.

BUT you can specify that a cell can span multiple columns with android:layout_span and this should get you what you want to do.

e.g. on Row 2 in your picture you would set the cell in the "12" column to span two columns (i.e. "12" and "13")

As an example this question gives more details

Andrew
  • 8,198
  • 2
  • 15
  • 35
  • I tried span but didnt get expected output , you can see tableRowParams.column=1; // tableRowParams.span=2; this comment i have added this didnt worked – Saurabh Jadhav Sep 19 '22 at 10:30
  • But you set the params on the tablerow itself `tableRow.setLayoutParams(tableRowParams);` whereas you need to this parameter on the thing instead the cell you want to be spanned e.g. `v.setLayoutParams(tableRowParams)` as per the answer linked – Andrew Sep 19 '22 at 11:55
  • oh okay gotcha! – Saurabh Jadhav Sep 20 '22 at 06:30