2012-11-19 2 views
3

TableLayoutTableRow 개의 복수 개의보기가 있습니다. 프로그래밍 방식으로 행의 높이를 지정하고 싶습니다. 예 :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 source code에 주위를 파고, I합니다 (된 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을 오버라이드 (override) 할 것이다 행 높이를 설정하려는 시도처럼 보인다. 누구든지이 문제를 해결할 방법을 알고 있습니까?

답변

5

좋아요, 지금이 문제가 있다고 생각합니다. 행의 높이를 설정하는 방법은 TableRow에 부착 된 TableLayout.LayoutParams을 사용하는 것이 아니라 에 연결된 TableRow.LayoutParams의 모든 셀을에 연결하는 것입니다. 한 셀을 원하는 높이로 만들고 (가장 높은 셀이라고 가정하면) 전체 행이 그 높이가됩니다.

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)); 
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); 
+0

감사하지만, 위의 인용 코드의 마지막 줄 ('') (findLargestCells''참조) : 내 경우, 나는 속임수를 썼는지 원하는 높이에 추가로 1 개 픽셀 폭 열 집합을 추가 TableLayout 소스 코드는 내가 지정한 것에 관계없이 ViewGroup.LayoutParams의 높이를 WRAP_CONTENT로 다시 설정합니다. –

관련 문제