我创建了一个扩展View的类:
public class BoardView extends View {
Run Code Online (Sandbox Code Playgroud)
我在应用程序的main.xml文件中指定了BoardView的宽度和高度:
<mypackage.BoardView
android:id="@+id/board"
android:layout_width="270px"
android:layout_height="270px" />
Run Code Online (Sandbox Code Playgroud)
我正在尝试从BoardView的构造函数调用的函数中获取宽度和高度.这是我正在做的事情:
ViewGroup.LayoutParams p = this.getLayoutParams();
int h = p.height;
Run Code Online (Sandbox Code Playgroud)
但是getLayoutParams总是返回null.知道为什么这不起作用吗?
Zso*_*any 16
将视图添加到其父级后,布局参数可用.尝试将代码从视图构造函数移动到onAttachedToWindow()因为getLayoutParams()不会返回null那里.
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
assert getLayoutParams() != null;
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*muh 13
我不确定在View的构造函数中是否可以使用布局参数(即LayoutParams的实例).我认为,它只有在"布局"通过后才可用.阅读Android如何在此处绘制视图.此外,此线程会尝试确定您应该准确获得视图的测量尺寸.
请注意,如果您只想获取通过布局XML传递的属性值,则可以将AttributeSet实例作为参数传递给构造函数.
public MyView(Context context, AttributeSet attrs){
// attrs.getAttributeCount();
// attrs.getAttributeXXXvalue();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15091 次 |
| 最近记录: |