Android中设置View.GONE后仍占用空间的问题求助
排查View.GONE后仍占空间的思路
兄弟,太懂这种明明按操作来却出问题的憋屈了!设了View.GONE还留着空间,大概率是这些细节没注意到,给你列几个排查方向:
父布局的约束/属性坑
- 要是用的
ConstraintLayout,检查下是不是给这个View加了app:layout_constraintHeight_min或app:layout_constraintWidth_min属性——哪怕设成GONE,最小尺寸的限制还在,自然会占空间。 - 用
LinearLayout的话,看看有没有给这个View设置layout_weight。带权重的GONE视图,有时候父布局的空间分配逻辑会残留它的权重占比,导致空出一块。
- 要是用的
margin/padding的遗留影响
- 别只盯着
View.GONE,看看这个View本身的margin,或者它父布局的padding有没有在搞事。有些布局会把GONE视图的margin计算进整体布局里,看起来就像还占着位置。可以试试把该View的margin临时设为0再测试。
- 别只盯着
是不是操作错了View?
- 有没有可能代码里
findViewById找错了对象?比如布局嵌套深、有重复id,导致你设置GONE的是另一个视图,而真正的View D还好好的占着位置。可以加个日志或者debug看看你操作的View实例是不是目标视图。
- 有没有可能代码里
动画/过渡效果的残留
- 有没有给这个View加过属性动画?比如用
ViewPropertyAnimator改过高宽,或者加了折叠动画但没完全结束/重置状态。动画的残留状态可能让视图看起来还占着空间,试试取消所有关联动画再设置GONE。
- 有没有给这个View加过属性动画?比如用
ScrollView的特殊情况
- 你用的是ScrollView,检查下它的直接子布局是不是设了固定高度?比如子布局是LinearLayout且height设成了固定值,那里面的View GONE后,子布局高度不会自动收缩,ScrollView里自然留着空。要确保子布局的高度是
wrap_content。
- 你用的是ScrollView,检查下它的直接子布局是不是设了固定高度?比如子布局是LinearLayout且height设成了固定值,那里面的View GONE后,子布局高度不会自动收缩,ScrollView里自然留着空。要确保子布局的高度是
内容的提问来源于stack exchange,提问作者Luca Pellizzari
相关产品推荐
相关产品推荐

