我有一个 RelativeLayout 作为根元素。根元素下有 3 个 LinearLayout。第一个和最后一个高度固定,中间一个占据屏幕的其余部分。
中间的LinearLayout里面有两个ScrollView。我以编程方式在其中添加新 View 。无论屏幕大小如何,我都想在 ScrollView 中显示三个项目。
问题是,我无法计算 are 的高度,所以我无法将它除以三并获得所需的项目高度。
我尝试调用 measure() 和 getMeasuredHeight() 但 LinearLayout 返回了 21(我不知道为什么)并且 ScrollViews 返回了 0。LinearLayout 和 ScrollViews 都具有 match_parent 属性。
那么我怎样才能得到实际的高度呢?我知道它是在某处计算的,因为我可以看到它覆盖了所有空白区域。
最佳答案
好的
除非你有充分的理由,否则不要这样做。这种布局不适用于平板电脑和更大的设备(拥有巨大的列表项看起来很奇怪)并且这不是常见的行为。
坏事
你说顶 View 和底 View 有固定的尺寸,你可以通过以下方式获得屏幕的高度:
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 大小尚未初始化。您需要等到 View 被赋予大小。有几种方法可以做到这一点:
- 使用
View.OnLayoutChangeListener
(API 11+) - 使用
ViewTreeObserver.OnGlobalLayoutListener
(API 1+) - 创建自定义 View 类(LinearLayout 的子类)并覆盖
onSizeChanged
关于android - 在添加 View 之前测量布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17372955/