Android LayoutParams 未正确更新

标签 android android-layout kotlin

所以我有一个 ScrollView ,我需要调整 ScrollView 的高度以确保它保持在模态弹出 View 上方。我不能使用约束布局,因为这个模式弹出 View 不是同一 View 父 View 的 subview 。所以我正在尝试动态更新我的 ScrollView 布局参数,以便它的高度足够小,不会隐藏在模式弹出窗口后面。

弹出 View 的高度可以在点上改变,所以我有一个回调,可以在模态视图改变时返回新的高度。在那个回调中,我像这样调整 ScrollView 的高度:

someModalView.onHeightChanged = { newViewHeight ->
    Log.d("TESTHEIGHT", "PreHeight = ${scrollView.height}")
    scrollView.layoutParams = FrameLayout.LayoutParams(scrollView.width, scrollView.height - newViewHeight)
    scrollView.requestLayout()
    Log.d("TESTHEIGHT", "PostHeight = ${scrollView.height}")
}

不幸的是,上面的代码似乎什么也没做,在我的日志中我可以看到 PreHeight 打印的高度与 PostHeight 相同。 View 高度没有改变的任何原因?

此外,我确实调试了它并确保 newViewHeight 不是 0,它不是,它是 ~800


最终通过向 View 添加填充而不是像这样更改其高度来使其工作:

someModalView.onHeightChanged = { newViewHeight ->
    scrollView.setPadding(0, 0, 0, newViewHeight)
}

这完全符合我的需要,但它并没有真正回答问题,所以我将把它留在答案中,供其他可能有帮助的人使用。但如果知道为什么更改布局参数不会更新 View 高度,那还是很高兴的。

最佳答案

尝试看看它是否适合你

val params = scrollView.layoutParams;
params.height = scrollView.height - newViewHeight
scrollView.layoutParams = params

关于Android LayoutParams 未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58457606/

相关文章:

java - 从自定义 View 到 Activity 进行通信

spring-boot - 单元测试 Spring Boot 应用服务层

android - 为 Kotlin 多平台项目运行单元测试时出错

android - 在Android中单击线性布局时将选择单选按钮

android - 编辑文本还是 TextView ?对于 “copy” 和 “share” 选项

android - 添加播放服务库后出错 : ':app:transformClassesWithJarMergingForDebug'

android - 创建时不得附加 ViewHolder View

android - 嵌套相对布局中的 layout_centerVertical 导致 Android P 上的 TextView 定位不正确

android - Admob 广告仅在第一次刷新后出现

找不到 Android ActionBar 类