2011-10-13 106 views
3

我已經創建了一組按鈕。現在我想查找按鈕的高度和寬度,並且爲此我使用了getWidth()和getHeight()。但事情是它總是返回0.爲什麼會發生這種情況?我發送了我的代碼,請檢查是否有任何錯誤。如何獲得按鈕的高度和寬度

int x,y; 
    LinearLayout layoutVertical = (LinearLayout) findViewById(R.id.liVLayout); 
    LinearLayout rowLayout = null; 

    LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1); 

    //Create Button 
    for (int i = 0; i<6; i++) 
    { 
     rowLayout = new LinearLayout(this); 
     rowLayout.setWeightSum(7); 
     layoutVertical.addView(rowLayout, param); 

     for(int j=0; j<7; j++) 
     { 
      m_pBtnDay[i][j] = new Button(this);    

      rowLayout.addView(m_pBtnDay[i][j], param); 

      m_pBtnDay[i][j].setOnLongClickListener(this);       

      m_pBtnDay[i][j].setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 
      m_pBtnDay[i][j].setTextSize(12);         
     } 
    } 
    x = m_pBtnDay[i][j].getWidth(); 
    y = m_pBtnDay[i][j].getHeight(); 
    Log.d("width", Integer.toString(x)); 
    Log.d("Height", Integer.toString(y)); 
    return true; 

回答

10

也許你在呼喚getWidth()getHeight()太早:我覺得UI一直沒有大小和佈局在屏幕上尚未...
你可以嘗試把這些代碼在這裏面:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    // Call here getWidth() and getHeight() 
} 
+0

因此,當我應該稱這些功能。我已經通過很多例子,但不能得到答案..你可以幫我解決這些問題 – AndroidDev

+0

@安士曼:創建dinamically佈局,讓它顯示前檢查寬度和高度。在我編輯的代碼中,我提供了一個例子,但我確定它不是唯一的例子。 – Marco

+0

@Anshuman:你沒有告訴我們你在調用你的代碼的函數/事件... – Marco

7

另一種方式

ViewTreeObserver vto = button.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 

     width = button.getWidth(); 
     height = button.getHeight(); 
    } 
}); 
0

您嘗試使用計數變量「i」和「j」從兩個for循環外使用。這應該引發一個例外,因爲在每個塊中只有一個是可用的。

試圖在第二個for循環輸出...

for (int i = 0; i<6; i++) 
{ 
    ... 
    for(int j=0; j<7; j++) 
    { 
     .... 
     x = m_pBtnDay[i][j].getWidth(); 
     y = m_pBtnDay[i][j].getHeight(); 
     Log.d("width", Integer.toString(x)); 
     Log.d("Height", Integer.toString(y)); 
    } 
} 
1

把這個在你的循環

x = m_pBtnDay[i][j].getWidth(); 
y = m_pBtnDay[i][j].getHeight(); 
Log.d("width", Integer.toString(x)); 
Log.d("Height", Integer.toString(y)); 

嘗試

-1

試試這個也可以正常工作:

btn.getDrawingCache().getHeight() and btn.getDrawingCache().getWidth() 
0

您可以覆蓋在佈局階段調用以下View方法。

protected void onSizeChanged (int w, int h, int oldw, int oldh) 

這似乎更合適,因爲它明確地佔零寬度和高度您看到的是:

這是當這種觀點的尺寸已經改變佈局過程中調用。 如果您剛剛添加到視圖層次結構中,則會調用 舊值爲0.

參數w此視圖的當前寬度。 h此 視圖的當前高度。 oldw此視圖的舊寬度。 oldh此視圖的舊高度。

請參閱here

相關問題