我最近不得不制作一个自定义视图,它会在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()?
还有一个奖金问题
我使用了以下链接和一堆其他stackoverflow讨论: https://developer.android.com/guide/topics/ui/how-android-draws.html https://plus.google.com/+ArpitMathur/posts/cT1EuBbxEgN