1

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

中间的LinearLayout里面有两个ScrollView。我以编程方式在其中添加新视图。无论屏幕大小如何,我都想在滚动视图中显示三个项目。

问题是,我无法计算 are 的高度,所以我无法将其除以三并获得所需的项目高度。

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

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

设计

4

1 回答 1

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
于 2013-06-28T20:33:43.780 回答