gpt4 book ai didi

android - 在哪里设置 View 的大小,它是扩展 RelativeLayout 的类的字段?

转载 作者:太空狗 更新时间:2023-10-29 14:23:31 25 4
gpt4 key购买 nike

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

最佳答案

在您的 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);

};

关于android - 在哪里设置 View 的大小,它是扩展 RelativeLayout 的类的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com