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