如何获得Button的高度和宽度

时间:2011-10-13 06:11:11

标签: android

我创建了一系列按钮。现在我想找到按钮的高度和宽度,为此我使用了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;

6 个答案:

答案 0 :(得分:13)

可能您过早地致电getWidth()getHeight():我认为用户界面尚未调整大小并在屏幕上显示... 您可以尝试将该代码放在其中:

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

答案 1 :(得分:7)

另一种方式

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

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

答案 2 :(得分: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));

试试吧

答案 3 :(得分:0)

您尝试使用count-variable“i”和“j”在两个for循环外部使用。这应该引发异常,因为每个for-block只能提供。

尝试在第二个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));
    }
}

答案 4 :(得分:0)

您可以覆盖在布局阶段调用的以下View方法。

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

这似乎更合适,因为它明确地说明了你观察到的零宽度和高度:

  

当此视图的大小发生更改时,将在布局期间调用此方法。   如果您刚刚添加到视图层次结构中,则使用   旧值为0。

     

参数w此视图的当前宽度。 h当前的高度   视图。 oldw这个视图的旧宽度。 oldh这个观点的高度。

请参阅here

答案 5 :(得分:-1)

尝试这个也可以工作:

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