是否有可能指定的TableRow高度?(Is it possible to specify Tabl

2019-08-02 21:58发布

我有一个TableLayoutTableRow里面的观点。 我希望以编程方式指定行的高度。 例如

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覆盖。 任何人都知道解决的办法?

Answer 1:

OK,我想我已经得到了这个窍门了。 设置行的高度的方式是不与拨弄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));


Answer 2:

首先,你应该把它从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);


文章来源: Is it possible to specify TableRow height?