我有一个类MyLayout
扩展RelativeLayout
,其中包括View
类型字段。MyLayout
对象是在 xml 布局文件中创建的,因此所有属性都在那里设置。我需要以编程方式设置View
字段的大小,这取决于它的父级(MyLayout
)的大小。
我试图在构造函数中设置它,但是当我尝试使用getWidth()
方法时,它返回 0,所以我假设大小尚未在构造函数中设置。我也试图在onDraw()
方法中设置它,但是当我运行一个应用程序时,这个内部View
会以默认大小显示第二个,然后它会缩放到正确的大小。然后我尝试将它放在onMeasure()
方法中,但是这个方法被调用了几次,所以它似乎根本没有效率。
那么设置它的最佳位置是什么?
这是我的课:
public class MyLayout extends RelativeLayout {
private View pointer;
public MyLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyLayout(Context context) {
super(context);
init(context);
}
private void init(Context c) {
pointer = new View(c);
pointer.setBackgroundResource(R.drawable.pointer);
addView(pointer);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)pointer.getLayoutParams();
lp.height = (int)(getHeight() * 0.198);
lp.width = (int)(getWidth() * 0.198);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}