如何正确添加子视图到视图组?

时间:2014-08-26 22:47:37

标签: 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);
    }
}

但是,当LinearLayout变为可见时,子视图不可见,并且没有为其中任何一个调用onMeasure。如果我背景并重新打开应用程序 - 正确显示视图,并为每个孩子调用onMeasure。

如果从onSizeChanged调用,

requestLayout()不起作用,所以我不得不在onSizeChanged的末尾添加以下hack:

post(new Runnable() {
    @Override
    public void run() {
        requestLayout();
    }
});

(通过requestLayout() has no effect when called from onSizeChanged()?

问题:

  • onSizeChanged()是addViews()的合适位置吗?什么是更好的地方呢?

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

还有一个奖金问题

  • 深入了解android视图&#34;生命周期&#34;的最佳来源是什么?何时以及什么得到或不被召唤?

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

0 个答案:

没有答案