【问题标题】:Place dynamic view between two views vertically在两个视图之间垂直放置动态视图
【发布时间】:2013-08-12 20:55:02
【问题描述】:

问题是:我想放置一个动态高度的视图,该高度将在运行时根据两个视图之间的宽度(我们称之为中心视图)进行计算。棘手的部分是顶部和底部视图应该调整它们的高度以适应中心视图测量和布局后留下的空间,并且它们的高度不应该小于 minHeight。我设法将所有三个视图放在垂直线性布局中,其中顶部和底部的权重 = 1,中心视图是某个固定高度,但是当中心视图高度变得大于某个值时,它会覆盖顶部和底部视图及其 minHeight 参数被忽略。以下是部分布局,希望对您有所帮助:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/topLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:minHeight="84dp"
        android:orientation="horizontal" >
        <!-- some content here -->
    </LinearLayout>

    <View
        android:id="@+id/centerView"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <LinearLayout
        android:id="@+id/BottomLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:minHeight="62dp"
        android:orientation="horizontal" >
        <!-- some content here -->
    </LinearLayout>

</LinearLayout>

【问题讨论】:

  • 澄清一下:您希望中间视图的高度由宽度计算得出,但仅限于总高度减去顶部和底部视图的最小高度?如果这是错误的,当可用的总高度小于 center_height + 2*minHeight 时会给出什么?
  • 是的,这是正确的,我知道可以在运行时根据顶视图和底视图高度进行调整,但是这个解决方案远非优雅
  • 有趣的约束集。我不确定你可以用LinearLayout 做到这一点;您可能需要定义自己的布局类(可能通过子类化LinearLayout)。

标签: android layout android-linearlayout android-relativelayout


【解决方案1】:

通过将中心视图的高度限制为 windowHeight - (minHeight1 + minHeight2) 来解决它,因为 minHeight1 和 minHeight2 是已知的常量。如果高度小于 windowHeight - (minHeight1 + minHeight2) 线性布局就可以了

【讨论】: