1

Ich habe eine Eltern RelativeLayout und 3 Kinderansichten. View one und View two sind übergeordnete Unterseite ausgerichtet. Ich möchte, dass meine Ansicht drei über Ansicht eins ausgerichtet ist, wenn Ansicht eins sichtbar ist, andernfalls Ausrichtung über Ansicht zwei, wenn Ansicht eins nicht sichtbar ist.Wie wird die Ansicht relativ zu mehreren Ansichten in RelativeLayout ausgerichtet?

Hier ist mein Layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <View 
     android:id="@+id/one" 
     android:layout_width="200dp" 
     android:layout_height="100dp" 
     android:layout_alignParentBottom="true" 
     android:background="@color/green" 
     tools:visibility="visible"/> 

    <View 
     android:id="@+id/two" 
     android:layout_width="250dp" 
     android:layout_height="60dp" 
     android:layout_alignParentBottom="true" 
     android:background="@color/red"/> 

    <View 
     android:id="@+id/three" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_above="@id/one" 
     android:layout_marginBottom="10dp" 
     android:background="@color/yellow"/> 

</RelativeLayout> 

Ich weiß, wenn ich Ansicht ein und Ansicht zwei in eine andere Ebene gestellt und es wird funktionieren, schauen Sie drei übereinander Schicht auszurichten, sondern als aktueller Architektur darf ich nicht zu TU das. Gibt es einen anderen Weg, dies zu erreichen? Würde ConstraintLayout in der Lage sein, dieses Problem zu lösen?

Antwort

2

Try this:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <View 
     android:id="@+id/one" 
     android:layout_width="200dp" 
     android:layout_height="100dp" 
     android:layout_above="@+id/two" 
     android:background="@android:color/holo_green_dark" 
     tools:visibility="visible"/> 

    <View 
     android:id="@+id/two" 
     android:layout_width="250dp" 
     android:layout_height="60dp" 
     android:layout_alignParentBottom="true" 
     android:background="@android:color/holo_red_dark"/> 

    <View 
     android:id="@+id/three" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_above="@+id/one" 
     android:layout_marginBottom="10dp" 
     android:background="@android:color/holo_blue_bright"/> 

</RelativeLayout> 

Die Sache ist einfach

android:layout_above="@+id/two"

fügen Sie ein sehen, die wird es über Ansicht zwei und fügen Sie machen bleiben

android:layout_above="@+id/one"

um drei zu sehen, die mak e es bleibt über Sicht eins.

Also wenn Sicht eins Sichtbarkeit ist weg Ansicht drei bleibt über Ansicht zwei.

Sie können dies testen, indem Sie die Sichtbarkeit für Ansicht eins deaktivieren.

Würde ConstraintLayout in der Lage sein, dieses Problem zu lösen?

Ja.

0

Wir können dies erreichen, indem wir es programmgesteuert machen.

Suchen Sie den folgenden Code, um die dritte Ansicht basierend auf dem Sichtbarkeitsstatus der ersten Ansicht auszurichten.

final View view3 = findViewById(R.id.three); 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100); 
params.addRule(RelativeLayout.ABOVE, view3.getVisibility() == View.VISIBLE ? R.id.one : R.id.two); 
view3.setLayoutParams(params); 
0

Wenn Sie mit Ihrem aktuellen Layout-gehen wollen, dann können Sie programmatisch die Höhe der Ansicht, die eine Null statt Änderung seiner Sicht gesetzt. In diesem Fall bleibt die Ansicht 3 auf der Oberseite der Ansicht und wegen der Höhe von Null wird die Ansicht 3 auf der Oberseite der zweiten Ansicht angezeigt.

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.one); 
relativeLayout.getLayoutParams().height = 0; 
Verwandte Themen