6

その中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 のソース コードを調べてみると、( onMeasure TableLayout() メソッドによってトリガーされた) に次のように表示されます。

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 によってオーバーライドされるようです。誰でもこれを回避する方法を知っていますか?

4

2 に答える 2

9

OK、これでコツがつかめたと思います。TableLayout.LayoutParams行の高さを設定する方法は、 に添付されたをいじるのではなく、TableRowいずれのセルにTableRow.LayoutParams添付された です。1 つのセルを目的の高さにするだけで、(最も高いセルを想定して) 行全体がその高さになります。私の場合、トリックを行った目的の高さに設定された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));
于 2012-11-19T23:21:37.000 に答える
1

まず、表示係数の式を使用して、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);
于 2012-11-19T00:11:18.723 に答える