Android自定义视图不会自行呈现

时间:2017-02-28 10:29:34

标签: android android-view

我正在创建一个自定义视图,它扩展了一个线性布局,只是在某个水平空间彼此添加了一些视图到该线性布局。

起初我是这样创建的:

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或不

0 个答案:

没有答案