通过将height设置为wrap_content来裁剪并显示子项,同时允许孩子获取其内容的全部高度?

时间:2018-01-30 06:27:50

标签: android android-linearlayout android-cardview

我的孩子是一个具有动态高度的LinearLayout,它可以在运行时更改,可以包含图像,并包含不同数量的子视图(也可能有子视图)。

此子LinearLayout位于CardView内。现在我希望这张卡片视图可以折叠。换句话说,当折叠时,它需要具有较小的高度(例如150dp)。在此模式下,卡片应仅显示儿童LinearLayout内容的前150dp(减去填充)。但是应该允许LinearLayout采用最大尺寸(尽管CardView的边界下方的底部没有显示,裁剪),方法是将其高度设置为wrap_content。这类似于我放置ScrollView(滚动到顶部)而不是CardView时会发生的情况。但是当我使用CardView执行此操作时。 LinearLayout没有采用最大高度来包装其子级的高度,而是采用由其父级CardView限定的高度。

这会导致图像缩小,并可能导致许多意外错误。

有没有办法实现这个功能? 是否存在除cardview之外的其他布局,它直接支持裁剪并仅显示部分内容,同时让孩子感觉它可以无限期地增强。

1 个答案:

答案 0 :(得分:3)

将您在LinearLayout中使用的CardView扩展为其他类(例如MyFrameLayout)并覆盖方法:

@Override
protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) {
    super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, View.MeasureSpec.UNSPECIFIED, heightUsed);
}

然后在布局中使用它,在运行时,您可以更改高度参数。