2016-04-22 19 views
1

Gibt es eine Möglichkeit, ein Layout an einem untergeordneten Element eines anderen Layouts auszurichten? Ich habe ein Beispiel erstellt:Ausrichten eines Layouts mit einem untergeordneten Element eines anderen Layouts

<?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" > 

    <RelativeLayout 
     android:id="@+id/rel1" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:background="#7F000000" 
     android:gravity="center" 
     android:layout_alignParentEnd="true"> 
     <View 
      android:id="@+id/view" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_marginBottom="5dp" 
      android:background="#00FF00"/> 
     <View 
      android:id="@+id/view2" 
      android:layout_width="50dp" 
      android:layout_below="@+id/view" 
      android:layout_height="50dp" 
      android:background="#00FF00"/> 
    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/rel2" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:background="#7F0000FF" 
     android:layout_alignTop="@+id/view2"> 

    </RelativeLayout> 
</RelativeLayout> 

Hier versuche ich die Spitze des RelativeLayout rel2 mit der Spitze view2 auszurichten, aber RelativeLayout nicht ermöglichen, das zu tun.

ich habe:

enter image description here

Ich möchte:

enter image description here

Dank.

+1

einfach ** nicht Nest ** andere 2 RelativeLayouts im Haupt ein . Perfekt. Und ** schneller **. –

+0

Möchten Sie, dass die Rel2-Breite der Match-Parent oder die Breite von Rel1 ist? –

+0

haben Sie überprüfen Sie http://StackOverflow.com/a/36837747/2826147 Antwort? –

Antwort

1

Sie können nicht.

Layoutbeschränkungen in einem bestimmten RelativeLayout sollten andere Ansichten innerhalb des gleichen relativen Layouts verweisen (aber nicht selbst!)

0

Ich bin ziemlich sicher, dass Sie, dass aus der XML-Datei nicht tun können, , aber ich bin sicher, dass Sie zur Laufzeit festlegen können die LayoutParams des rel2 die LayoutParams von view2, anzupassen und das root-Layout FrameLayout

0

Nehmen Linearlayout gesetzt als Elternteil als Verwenden Sie zwei RelativeLayout in Kind,

Verwenden android:weightSum in Linearlayout mit android:orientation.

nun diese xml überprüfen, werden Sie Ihre gewünschte Ausgabe

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="2"> 

    <RelativeLayout 
     android:id="@+id/rel3" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1.4" 
     android:gravity="center"> 

     <RelativeLayout 
      android:id="@+id/rel21" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_marginTop="55dp" 
      android:background="#7F0000FF" /> 
    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/rel1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.6" 
     android:background="#7F000000" 
     android:gravity="center"> 

     <View 
      android:id="@+id/view" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="5dp" 
      android:background="#00FF00" /> 

     <RelativeLayout 
      android:id="@+id/rel2" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_below="@+id/view" 
      android:background="#7F0000FF"> 

      <View 
       android:id="@+id/view2" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_centerHorizontal="true" 
       android:background="#00FF00" /> 
     </RelativeLayout> 
    </RelativeLayout> 

</LinearLayout> 

enter image description here

+0

Entschuldigung für meine Abwesenheit, es kann eine Lösung sein, aber es ist nicht so flexibel wie ich erwartet hatte. Wenn Sie beispielsweise ein neues grünes Quadrat hinzufügen oder wenn Sie layout_marginBottom ändern, verlieren Sie die horizontale Ausrichtung der blauen Linie. Ich erwarte eine blaue Linie, deren Position total von einer grünen Quadratposition abhängt. –

+0

Ich weiß nicht, was Sie tun wollen, nachdem Sie dies erreicht haben. Wir antworten im Allgemeinen, was in Frage gestellt wird. –

0
<?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"> 

<RelativeLayout 
    android:id="@+id/rel1" 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:layout_alignParentEnd="true" 
    android:background="#7F000000" 
    android:gravity="center"> 

    <View 
     android:id="@+id/view" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginBottom="5dp" 
     android:background="#00FF00" /> 

    <View 
     android:id="@+id/view2" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_below="@+id/view" 
     android:background="#00FF00" /> 


</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/rel3" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"> 

    <RelativeLayout 
     android:id="@+id/rel2" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_marginTop="55dp" 
     android:background="#7F0000FF"> 

    </RelativeLayout> 
</RelativeLayout> 
bekommen

Verwandte Themen