android - 通过将高度设置为 wrap_content 来裁剪和显示 child ,同时允许 child 占据其内容的全部高度?

标签 android android-linearlayout android-cardview

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

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

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

有没有办法实现这个功能? 有没有一种不同于cardview的Layout,直接支持裁剪,只显示部分内容,同时让 child 觉得可以无限增高。

最佳答案

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

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

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

关于android - 通过将高度设置为 wrap_content 来裁剪和显示 child ,同时允许 child 占据其内容的全部高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48515200/

相关文章:

安卓蓝牙 : Unable to connect to listening socket after generating a random UUID

sql - 从 SQLite 中的 INSERT OR IGNORE 语句中查找自动递增的值

android - "IllegalStateException : scrollview can host only one direct child"在一个 LinearLayout 添加

android - 滚动时的Recycler View 和卡片创建多个副本

android - Firebase 可扩展通知在应用程序处于后台时显示图像

android - 在 Service 中使用 startForeground(int, notification) 是否会获取 WakeLock?

android - 将 TextView 添加到 LinearLayout 时出现 ClassCastException

Android:如何将ListView中的文本大小更改为变大?

java - 如何在 Android 中动态创建 CardView

java - 如何处理卡片 View 中不同的按钮 onclick 并传递 Intent ?