android - 在添加 View 之前测量布局?

标签 android scrollview android-relativelayout

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

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

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

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

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

design

最佳答案

好的

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

坏事

你说顶 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/

相关文章:

iOS/swift |无限 View 矩阵 : ScrollView or CollectionView?

java - 如果使用RelativeLayout则未设置背景图像

android - 如何将带有图像的圆形 TextView 放置在透明图像android附近?`

java - 如何动画 View 的高度?

android - 错误 :Gradle: Execution failed for task ':app:crashlyticsCleanupResourcesDebug' . > Crashlytics 开发者工具错误

java - 字符串不能为空?

android - 是否可以在 WebView 中设置自定义 HTTP header

android - 在 Android 市场(谷歌)中升级应用程序

Android:将 ScrollView 置于页眉和页脚之间

flutter - 如何在 flutter 的 ScrollView 中将容器或任何其他小部件固定在应用栏下方