studio layout_below espaƱol ejemplo constraintlayout constraint bottom below android relativelayout

android - layout_below - Problema con RelativeLayout cuando la visibilidad de la vista es View.GONE



relativelayout below (6)

¿Por qué no actualizar el atributo below de TextView3 cuando actualiza la visibilidad de TextView2? (Supongo que haces esto en el código)

algo como

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);

Tengo un RelativeLayout así:

<RelativeLayout> <TextView1/> <TextView2/> // <-- View.VISIBLE OR View.GONE <TextView3/> <TextView4/> </RelativeLayout>

Cada TextView está anclado debajo de la vista de texto anterior con android:layout_below .

El problema es que TextView2 puede estar o no allí (ya sea View.VISIBLE o View.GONE ); si es View.VISIBLE , todo está bien, pero si se trata de View.GONE , TextView3 termina renderizado sobre TextView1.

He intentado varias formas de arreglar esto, pero cada vez estoy atrapado por RelativeLayout "no se puede hacer referencia a una identificación antes de que se haya definido".

Espero que me esté perdiendo algo obvio aquí.


En caso de que no esté obligado a usar RelativeLayout : use LinearLayout en LinearLayout lugar.


Esta respuesta no resuelve su problema específico, pero resuelve uno similar, así que con suerte esto ayudará a alguien.

Tuve una situación en la que mi diseño relativo no tenía el equivalente de su TextView1. Entonces, en mi situación, si TextView2 se GONE, entonces quería que TextView3 se alineara con la parte superior de los padres. Lo resolví agregando a TextView3 el atributo android: layout_alignWithParentIfMissing = "true". Ver http://developer.android.com/resources/articles/layout-tricks-efficiency.html .

Desafortunadamente, no veo una forma de especificar un ancla de alineación alternativa a menos que sea el padre.


Olvídate de INVISIBLE o GONE , utiliza esto en su lugar:

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


Puede colocar textview 2 y 3 en LinearLayout y mantener el diseño lineal debajo de textview 1.


Puedes usar esta etiqueta:

android:layout_alignWithParentIfMissing="true"

De los documentos:

Si se establece en verdadero, el padre se usará como ancla cuando no se pueda encontrar el anclaje para layout_toLeftOf, layout_toRightOf, etc.