2017-08-22 3 views
0

Je développe une application sur Android avec ce formulaire:GridLayout est chevauchée, lorsque le VISIBILITÉ de certains de ses éléments est réglé sur GONE

<ScrollView> 

    <RelativeLayout> 

    <TextView/> 

    <RelativeLayout> 
     .... 
    </RelativeLayout> 

    <gridLayout> 
     7 CheckBoxes 
     1 ImageButton 
    </gridLayout> 

    <LinearLayout> 
     many TextViews 
    </LinearLayout> 

    </RelativeLayout> 

</ScrollView> 

Le ImageButton à l'intérieur des lorsque certains des cases à cocher disparaissent gridLayout contrôles (VISIBILITY->GONE) et quand il est pressé (le ImageButton) le LinearLayout, qui est juste en dessous (le gridLayout), chevauche le gridLayout avant qu'il ne prenne sa forme finale. Voir les images ci-dessous:

[1]: https://i.stack.imgur.com/K6aSc.png C'est avant la disparition.

[2]: https://i.stack.imgur.com/nHqpj.png Cela se produit pendant la disparition.

EDIT: Le problème se produit parce que le View.GONE prend un certain temps à réaliser visuellement, mais le gridLayout comprend que cela arrive immédiatement, il se réserve l'espace « vide » tout de suite. Je pense seulement que je peux comprendre, est de définir le View.INVISIBLE à la place et de redimensionner le gridLayout manuellement. Y a-t-il un meilleur moyen?

EDIT2 Le problème est dû à animateLayoutChanges="true". En raison des animations, il faut du temps pour que les checkBox disparaissent. Existe-t-il un moyen de forcer le linearLayout à "attendre" que l'effet de l'animation se termine?

Des idées?

Répondre

0

Vous pouvez ajouter un écouteur à vos changements d'animation de animateLayoutChanges = "true" et déplacer le LinearLayout lorsque l'animation se termine. Plus d'informations dans ce fil - Listner

En outre, vous pouvez essayer une combinaison de setAlpha(0) et setEnabled(false) dans vos cases à cocher gridLayout ne sera pas ajuster les vues à nouveau.