3

我有一个类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);
    }
}
4

1 回答 1

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);

};
于 2013-01-28T12:47:54.820 回答