GridLayout重叠,当其某些元素的可见性设置为GONE

时间:2017-08-22 15:23:40

标签: android layout overlapping

我正在使用此表单在Android上开发应用程序:

<ScrollView>

  <RelativeLayout>

    <TextView/>

    <RelativeLayout>
      ....
    </RelativeLayout>

    <gridLayout>
      7 CheckBoxes
      1 ImageButton
    </gridLayout>

    <LinearLayout>
      many TextViews
    </LinearLayout>

  </RelativeLayout>

</ScrollView>

ImageButton内的gridLayout控制某些复选框消失后(VISIBILITY->GONE)以及当它被按下时(ImageButton)LinearLayout,它位于其下方(gridLayout),在gridLayout采用最终形式之前重叠。见下图:

  

[1]:https://i.stack.imgur.com/K6aSc.png这是在失踪之前。

     

[2]:https://i.stack.imgur.com/nHqpj.png这种情况发生在消失期间。

编辑:问题发生是因为View.GONE需要一些时间才能直观地执行,但gridLayout明白它会立即发生,因此保留“空”空间马上。只想我能搞清楚,就是设置View.INVISIBLE而是手动调整gridLayout的大小。还有更好的方法吗?

EDIT2 问题是由animateLayoutChanges="true"引起的。由于动画,checkBoxes消失需要一些时间。有没有办法强制linearLayout“等待”动画效果结束?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以为动画更改添加一个监听器animateLayoutChanges =&#34; true&#34;并在动画结束时移动LinearLayout。此主题中的更多信息 - Listner

此外,您可以在复选框上尝试setAlpha(0)setEnabled(false)的组合,在这种情况下,gridLayout不会再次调整视图。