2011-07-07 65 views
0

我有一個例程,在TableLayout內動態創建TableRow,這是從XML中誇大的。我試圖設置TableRow s是一個特定的寬度,用一個自定義按鈕填充它們(ButtonElement)...但沒有任何顯示。註銷寬度爲TableRow,似乎它被設置爲0,這可能解釋爲什麼它沒有被顯示。動態佈局setLayoutParams沒有設置

final Drawable normalBtnBg = getResources().getDrawable(R.drawable.button_states); 
TableRow tableRow; 
for (int x = 0; x < xDim; x++) { 
    tableRow = new TableRow(this); 
    tableRow.setLayoutParams(new TableLayout.LayoutParams(400, 20)); 
    for (int y = 0; y < yDim; y++) { 
     // create the new button 
     mButtons[x][y] = new ButtonElement(this, x, y); 
     mButtons[x][y].setBackgroundDrawable(normalBtnBg); 
     mButtons[x][y].setLayoutParams(new LayoutParams(20, 20)); 

     // add the button to the TableLayout 
     tableRow.addView(mButtons[x][y]); 
    } 

    // add the TableRow to the table 
    mButtonGrid.addView(tableRow, new TableLayout.LayoutParams(400, 20)); 
    Log.d(LOG_TAG, "trWidth - " + tableRow.getWidth()); 
} 

tableRow.getWidth()總是返回值爲0 ...我已經驗證正在生成的按鈕,就好像我直接將它們添加到mButtonGrid,它們顯示(當然,不是在TableRow,只是垂直下)。

任何幫助表示讚賞。

編輯:

想通了這一點,請參閱我的回答如下。

+0

你能打印從tabeRow結果。 getMeasuredWidth()? –

+0

@Damian - 值也是0。 –

回答

2

僅供參考,解決了這個問題......我用TableLayout.LayoutParams,而是利用TableRow.LayoutParams使它(從here)工作所需:

final Drawable normalBtnBg = getResources().getDrawable(R.drawable.button_states); 
TableRow tableRow; 
for (int x = 0; x < xDim; x++) { 
    tableRow = new TableRow(this); 
    tableRow.setLayoutParams(new TableRow.LayoutParams(400, 20)); 
    for (int y = 0; y < yDim; y++) { 
     // create the new button 
     mButtons[x][y] = new ButtonElement(this, x, y); 
     mButtons[x][y].setBackgroundDrawable(normalBtnBg); 
     mButtons[x][y].setLayoutParams(new TableRow.LayoutParams(20, 20)); 

     // add the button to the TableLayout 
     tableRow.addView(mButtons[x][y]); 
    } 

    // add the TableRow to the table 
    mButtonGrid.addView(tableRow, new TableLayout.LayoutParams(400, 20)); 
}