Можно ли указать TableRow height?

У меня есть TableLayout с несколькими представлениями TableRow внутри него. Я хочу указать высоту строки программно. Например

 int rowHeight = calculateRowHeight(); TableLayout tableLayout = new TableLayout(activity); TableRow tableRow = buildTableRow(); TableLayout.LayoutParams rowLp = new TableLayout.LayoutParams( LayoutParams.FILL_PARENT, rowHeight); tableLayout.addView(tableRow, rowLp); 

Но это не работает и не выполняет WRAP_CONTENT. Копаясь в исходном коде Android , я вижу это в TableLayout (вызванном методом onMeasure ()):

 private void findLargestCells(int widthMeasureSpec) { final int count = getChildCount(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child instanceof TableRow) { final TableRow row = (TableRow) child; // forces the row's height final ViewGroup.LayoutParams layoutParams = row.getLayoutParams(); layoutParams.height = LayoutParams.WRAP_CONTENT; 

Кажется, что любая попытка установить высоту строки будет переопределена TableLayout. Кто-нибудь знает об этом?

    Хорошо, я думаю, что у меня есть это. Способ установить высоту строки – это не возиться с TableLayout.LayoutParams прикрепленным к TableRow , но TableRow.LayoutParams прикрепленным к любой из ячеек. Просто сделайте одну ячейку нужной высоты и (предположив ее самую высокую ячейку), весь ряд будет такой высоты. В моем случае я добавил дополнительный столбец шириной в 1 пиксель, установленный на желаемую высоту, что и сделало трюк:

     View spacerColumn = new View(activity); //add the new column with a width of 1 pixel and the desired height tableRow.addView(spacerColumn, new TableRow.LayoutParams(1, rowHeight)); 

    Прежде всего, вы должны преобразовать его из dps в пиксели, используя формулу коэффициента отображения.

      final float scale = getContext().getResources().getDisplayMetrics().density; int trHeight = (int) (30 * scale + 0.5f); int trWidth = (int) (67 * scale + 0.5f); ViewGroup.LayoutParams layoutpParams = new ViewGroup.LayoutParams(trWidth, trHeight); tableRow.setLayoutParams(layoutpParams);