在添加视图之前测量布局?

时间:2013-06-28 20:16:21

标签: android scrollview relativelayout

我有一个RelativeLayout作为根元素。根元素下有三个LinearLayouts。第一个和最后一个具有固定的高度,中间的一个具有屏幕的其余部分。

LinearLayout中间有两个ScrollView。我以编程方式在其中添加新视图。我想在滚动视图中显示三个项目,无论屏幕尺寸是多少。

问题是,我无法计算高度,所以我不能将它除以三并获得所需的物品高度。

我试图调用measure()和getMeasuredHeight()但是LinearLayout返回21(我不知道为什么)并且ScrollViews返回0. LinearLayout和ScrollViews都有match_parent属性。

那么如何才能获得实际高度?我知道它是在某处计算的,因为我可以看到它覆盖了所有空白区域。

design

1 个答案:

答案 0 :(得分:2)

除非你有充分的理由,否则不要这样做。这种布局不适用于平板电脑和大型设备(看起来很奇怪有大型列表项)并且它不常见。

错误

你说顶视图和底视图有一个固定的大小,你可以通过以下方式获得屏幕的高度:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
// Use getSize on API13+
int displayHeight = display.getHeight();

然后每行的高度只是

int listHeight = displayHeight - (2 * fixedHeight)
int rowHeight = listHeight/3;

这很糟糕,因为它不适用于更复杂的布局。

丑陋

onCreate中,您的观看次数尚未初始化。您需要等到视图被指定大小。有几种方法可以做到这一点:

  • 使用View.OnLayoutChangeListener(API 11 +)
  • 使用ViewTreeObserver.OnGlobalLayoutListener(API 1 +)
  • 创建自定义View类(子类LinearLayout)并覆盖onSizeChanged