我创建了一个扩展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。知道为什么这不起作用吗?
答案 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();
}