如何正确添加子视图以查看组?

sla*_*der 5 android android-layout android-view

我最近不得不制作一个自定义视图,该视图将在LinearLayout中显示一系列ImageView-水平固定高度,将父级宽度线性布局与固定大小的图像匹配。我实现了以下内容:

protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
    super.onSizeChanged(width, height, oldWidth, oldHeight);
    removeAllViews();

    for (int i = 0; i < imagesCount; i++) {
        ImageView image = createImageView();
        addView(image);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当LinearLayout变为可见时,子视图将不可见,并且其中的任何一个都不会调用onMeasure。如果我在后台打开应用程序并重新打开,则视图将正确显示,并为每个孩子调用onMeasure。

如果从onSizeChanged调用requestLayout()不起作用,那么我不得不在onSizeChanged的末尾添加以下hack:

post(new Runnable() {
    @Override
    public void run() {
        requestLayout();
    }
});
Run Code Online (Sandbox Code Playgroud)

(通过requestLayout()从onSizeChanged()调用时无效吗?

问题:

  • onSizeChanged()是否是添加addViews()的合适位置?否则,哪个地方更好?

  • 有没有更好的方法来强制父视图在onSizeChanged之后不使用post()来度量其子级?

还有一个奖金问题

  • 深入了解android视图“生命周期”的最佳来源是什么,例如何时以及何时调用或不调用?

我使用了以下链接和其他一些stackoverflow讨论:https : //developer.android.com/guide/topics/ui/how-android-draws.html https://plus.google.com/+ArpitMathur/posts / cT1EuBbxEgN