我正在创建一个自定义视图,它扩展了一个线性布局,只是在某个水平空间彼此添加了一些视图到该线性布局。
起初我是这样创建的:
public BarsControl(Context context)
{
super(context);
setValues(null);
}
public BarsControl(Context context, AttributeSet attrs)
{
super(context, attrs);
setValues(attrs);
addBars();
}
public BarsControl(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
setValues(attrs);
addBars();
}
public BarsControl(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
{
super(context, attrs, defStyleAttr, defStyleRes);
setValues(attrs);
addBars();
}
addBars
方法是创建所有视图并将其添加到线性布局的方法。
当我像上面那样做的时候,一切都很好。
之后,我想根据视图的实际宽度更改视图之间的空间。我的想法是,如果用户将宽度设置为wrap_content
,那么什么都不会改变,但如果他将其设置为match_parent
那么空间需要增长。所以我做的是添加这个方法:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
spaceBetweenBarsPixels = (int) ((w - barWidth * numberOfBars) / numberOfBars);
addBars();
}
(spaceBetweenBarsPixels对您来说是否正确?)
但是现在添加之后,布局根本不会渲染,除非我做了直接影响它的事情,并在应用程序运行后重新绘制它。
如何根据视图的实际大小绘制视图?
注意 - 我无法从onMeasure
获取父亲的宽度并使用它,因为我不知道用户是否将宽度设置为match_parent
或不