Problème avec RelativeLayout lorsque la visibilité de la vue est View.GONE

J’ai un RelativeLayout donc:

    // <-- View.VISIBLE OR View.GONE    

Chaque TextView est ancré sous le TextView précédent avec android:layout_below .

Le problème est que TextView2 peut ou peut ne pas être là (soit View.VISIBLE ou View.GONE ); Si c’est View.VISIBLE , alors tout va bien, mais si c’est View.GONE , alors TextView3 est rendu sur TextView1.

J’ai essayé différentes méthodes pour résoudre ce problème, mais à chaque fois que RelativeLayout pris en charge, vous ne pouvez pas référencer une règle avant sa définition.

J’espère que je manque quelque chose d’évident ici.

Vous pouvez placer les textview 2 et 3 dans LinearLayout et conserver la disposition linéaire sous textview 1.

Vous pouvez utiliser cette balise:

 android:layout_alignWithParentIfMissing="true" 

De la documentation:

Si défini sur true, le parent sera utilisé comme ancre lorsque l’ancre ne peut pas être trouvée pour layout_toLeftOf, layout_toRightOf, etc.

Pourquoi ne pas mettre à jour l’atsortingbut belowbelow de TextView3 lorsque vous mettez à jour la visibilité de TextView2? (Je suppose que vous faites cela en code)

quelque chose comme

 TextView tv = (TextView) findViewById(R.id.textview3); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) tv.getLayoutParams(); lp.addRule(RelativeLayout.BELOW, R.id.textview1); ((TextView) view).setLayoutParams(lp); 

Cette réponse ne résout pas votre problème spécifique, mais résout un problème similaire, alors j’espère que cela aidera quelqu’un.

J’ai eu une situation où ma mise en page relative n’avait pas l’équivalent de votre TextView1. Donc, dans ma situation, si TextView2 était GONE, alors je voulais que TextView3 soit aligné avec le sumt du parent. J’ai résolu cela en ajoutant à TextView3 l’atsortingbut Android: layout_alignWithParentIfMissing = “true”. Voir http://developer.android.com/resources/articles/layout-sortingcks-efficiency.html .

Malheureusement, je ne vois aucun moyen de spécifier une autre ancre d’alignement, sauf s’il s’agit du parent.

Oubliez INVISIBLE ou GONE , utilisez plutôt ceci:

 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); params.height = 0; params.setMargins(0,0,0,0); view.setLayoutParams(params); 

Un simple hack pour cela est de jouer avec alpha 0/1. et aussi désactiver le onClickListener s’il y en a

tu peux le faire

entrer la description de l’image ici

laisser TextView3 en dessous de ce FrameLayout qui n’a pas d’arrière-plan, donc si TextView2 est Gone, il n’occupe pas d’espace.