Android自定义视图不支持';我无法自圆其说

Android自定义视图不支持';我无法自圆其说,android,android-view,Android,Android View,我正在创建一个自定义视图,它扩展了一个线性布局,并在某个水平空间向该线性布局添加了一些视图 起初,我是这样创建的: public BarsControl(Context context) { super(context); setValues(null); } public BarsControl(Context context, AttributeSet attrs) { super(context, attrs); setValues(attrs);

我正在创建一个自定义视图,它扩展了一个线性布局,并在某个水平空间向该线性布局添加了一些视图

起初,我是这样创建的:

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();
}
addbar
方法是创建所有视图并将其添加到线性布局的方法

当我像上面那样做的时候,一切都很顺利

之后,我想根据视图的实际宽度更改视图之间的空间。我的想法是,如果用户将宽度设置为
wrap\u content
,则不会有任何变化,但如果用户将宽度设置为
match\u 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();
}
(BarsPixels之间的空格对您来说是否正确?)

但是现在,在添加这个之后,布局将不会呈现,除非我正在做一些直接影响它的事情,并在应用程序已经运行之后使它重新绘制自己

如何根据视图的实际大小绘制视图本身


注意-我不能仅仅从测量中获取父对象的宽度并使用它,因为我不知道用户是否将宽度设置为匹配父对象。

是否也可以看到
addbar
方法实现?@marino它只是在循环中创建新视图,设置背景,给它一个LinearLayoutParams,边距在两个像素之间,然后调用addViewOk
spaceBetweenBarsPixel
似乎是正确的,但要使其正常工作,您应该在再次添加条形图时调用
invalidate()
redraw()
方法。由于这是一种线性布局,更好的方法是将
权重和设置到
栏控件
布局中(等于将在
添加栏
中添加的视图数),然后将
权重=1
重心设置到每个栏。这将使它们在布局中居中且均匀分布,甚至不计算间距!你尝试过这个提议的解决方案吗?我很想知道这是否有效:)似乎是在onSizeChanged中调用addBars导致了这个问题。我不再重写那个方法了