在哪里设置视图的大小,这是扩展RelativeLayout的类的字段?

时间:2013-01-28 10:53:15

标签: android android-layout view

我有一个MyLayout课程RelativeLayout,其中包含View类型字段。 {x}布局文件中创建了MyLayout对象,因此在那里设置了所有属性。我需要以编程方式设置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);
    }
}

1 个答案:

答案 0 :(得分:1)

在MyLayout类中,覆盖onSizeChanged():

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)pointer.getLayoutParams();
     lp.height = (int)(getHeight() * 0.198);
     lp.width = (int)(getWidth() * 0.198);

};