getLayoutParams返回null?

时间:2010-01-13 23:09:42

标签: android

我创建了一个扩展View的类:

public class BoardView extends View  {

我在应用程序的main.xml文件中指定了BoardView的宽度和高度:

  <mypackage.BoardView
        android:id="@+id/board"         
        android:layout_width="270px" 
        android:layout_height="270px" /> 

我正在尝试从BoardView的构造函数调用的函数中获取宽度和高度。这就是我正在做的事情:

ViewGroup.LayoutParams p = this.getLayoutParams();
int h = p.height;

但getLayoutParams始终返回null。知道为什么这不起作用吗?

2 个答案:

答案 0 :(得分:15)

将视图添加到其父级后,布局参数可用。尝试将代码从视图构造函数移动到onAttachedToWindow(),因为getLayoutParams()不会在那里返回null

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    assert getLayoutParams() != null;
}

答案 1 :(得分:13)

我不确定在View的构造函数中是否可以使用布局参数(即LayoutParams的实例)。我认为,它只有在“布局”通过后才可用。阅读How Android draws views here.此外,this thread会尝试确定您应该何时获得视图的测量尺寸。

请注意,如果您只想获取通过布局XML传递的属性值,则可以使用AttributeSet实例作为构造函数的参数传递。

public MyView(Context context, AttributeSet attrs){
// attrs.getAttributeCount();
// attrs.getAttributeXXXvalue();
}