Ich habe eine RelativeLayout
so:
<RelativeLayout>
<TextView1/>
<TextView2/> // <-- View.VISIBLE OR View.GONE
<TextView3/>
<TextView4/>
</RelativeLayout>
Jeder TextView
ist unter dem vorherigen TextView
mit verankert android:layout_below
.
Das Problem ist, dass TextView2 möglicherweise vorhanden ist oder nicht (entweder View.VISIBLE
oder View.GONE
). Wenn ja View.VISIBLE
, ist alles in Ordnung, aber wenn View.GONE
ja, wird TextView3 über TextView1 gerendert.
Ich habe verschiedene Möglichkeiten ausprobiert, um dies zu beheben, aber jedes Mal, wenn RelativeLayout
Sie von 's' überrascht werden, können Sie nicht auf eine ID verweisen, bevor diese als 'Regel' definiert ist.
Ich hoffe, dass mir hier etwas Offensichtliches fehlt.
RelativeLayout
verfügt über einen eingebetteten Mechanismus zum Auffinden der nächstgelegenen Nicht-GONE-Ankeransicht. Ich habe bei Gingerbread nachgesehen und es ist sogar dort vorhanden: github.com/aosp-mirror/platform_frameworks_base/blob/…Antworten:
Sie können die Textansichten 2 und 3 im LinearLayout platzieren und das lineare Layout unter der Textansicht 1 beibehalten.
quelle
Sie können dieses Tag verwenden:
android:layout_alignWithParentIfMissing="true"
Aus den Dokumenten:
quelle
Warum nicht das
below
Attribut von TextView3 aktualisieren, wenn Sie die Sichtbarkeit von TextView2 aktualisieren? (Ich nehme an, Sie tun dies im Code)etwas wie
quelle
Diese Antwort löst nicht Ihr spezifisches Problem, sondern ein ähnliches. Hoffentlich hilft dies jemandem.
Ich hatte eine Situation, in der mein relatives Layout nicht dem von TextView1 entsprach. Wenn in meiner Situation TextView2 GEGANGEN war, wollte ich, dass TextView3 an der Oberseite des Elternteils ausgerichtet wird. Ich habe das gelöst, indem ich TextView3 das Attribut android hinzugefügt habe: layout_alignWithParentIfMissing = "true". Siehe http://developer.android.com/resources/articles/layout-tricks-efficiency.html .
Leider sehe ich keine Möglichkeit, einen alternativen Ausrichtungsanker anzugeben, es sei denn, es ist der übergeordnete Anker.
quelle
Vergessen Sie
INVISIBLE
oderGONE
, verwenden Sie stattdessen Folgendes:RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); params.height = 0; params.setMargins(0,0,0,0); view.setLayoutParams(params);
quelle
du kannst das
<RelativeLayout> <TextView1/> <FrameLayout> <TextView2/> // <-- View.VISIBLE OR View.GONE </FrameLayout> <TextView3/> <TextView4/> </RelativeLayout>
Lassen Sie TextView3 unter diesem FrameLayout ohne Hintergrund. Wenn TextView2 also Gone ist, belegt es keinen Platz.
quelle
Platzieren Sie alle Textansichten mit vertikaler Ausrichtung unter LinearLayout.
<LinearLayout> <TextView/> <TextView/> <TextView/> <TextView/> <TextView/> <TextView/> </LinearLayout>
quelle
Ein einfacher Hack dafür ist, mit Alpha 0/1 zu spielen. und deaktivieren Sie auch den onClickListener, falls vorhanden
quelle