2012-05-01 14 views
25

Ich habe Erfahrung mit RelativeLayout, aber ich habe noch nie einen Weg gefunden, um das Problem zu lösen (abgesehen von harten Coding Margin-Werte, die ich will . vermeiden)Android RelativeLayout zentriert eine Ansicht in der rechten oberen Ecke einer anderen Ansicht

ich will versuchen, so etwas wie das folgende Bild in einem RelativeLayout zu erstellen:

enter image description here

die Box ist seine eigene Ansicht und ich mag den Blick bekommen, die den orangefarbenen Kreis enthält zentriert in der oberen rechten Ecke der Ansicht, die das blaue Feld enthält.

Ich versuchte mit android:alignTop="boxView" und android:alignRight="boxView", aber das legte meine orange Kreis komplett in meiner Box. Ich möchte, dass der Kreis über der oberen rechten Ecke der Box zentriert ist.

Weiß jemand, wie ich dieses Ergebnis mit einem RelativeLayout bekommen kann? vorzugsweise ohne die Ränder für die orangefarbene Punktansicht vom Rand des Bildschirms fest codieren zu müssen.

+0

Warum möchten Sie keine Marge dafür verwenden? Marge scheint der perfekte Weg, dies zu erreichen. – Bobbake4

+0

Ich will nur keinen Rand für wie weit vom Bildschirmrand geben. Wenn ich es an die Box ausrichten könnte und sie dann um die Hälfte ihres Durchmessers mit einem Rand verschieben könnte, der eigentlich ideal wäre. Aber ich kann nur herausfinden, wie es geht, indem ich sage, wie weit weg von der Kante des Bildschirms zu sein, und nicht wie weit weg von dem Punkt, an dem ich ausrichten möchte. – FoamyGuy

Antwort

29

Dieser Code erstellt, wonach Sie suchen, verwendet jedoch Ränder. Jetzt können Sie den Rand im Code festlegen, wenn es sich um eine dynamische Struktur handelt, die Sie erstellen. Wie Sie sehen können, habe ich negative Ränder verwendet, um die obere rechte Form außerhalb der blauen Box zu verschieben. Diese müssen die Hälfte der Höhe des Kreises betragen, den Sie bewegen möchten. Sie können all dies in Code tun, um den Kreis in der oberen rechten Ecke zu zentrieren.

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

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:background="#0000FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="26dp" 
      android:layout_height="26dp" 
      android:layout_alignRight="@+id/linearLayout1" 
      android:layout_alignTop="@+id/linearLayout1" 
      android:layout_marginRight="-13dp" 
      android:layout_marginTop="-13dp" 
      android:background="#FF00FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </RelativeLayout> 
+3

Ich wusste nichts über negative Margen. Perfekt, danke. – FoamyGuy

+0

Beachten Sie, dass dies nicht wirklich funktioniert, wenn die zweite Ansicht von einem Bild skaliert wird, da Zeichnungsobjekte in DP keine konsistente Größe haben (ihre Größe in Pixeln springt von einem DPI-Bucket zum nächsten anstatt kontinuierlich zu skalieren). Sie können also nicht nur 26dp/2 = 13dp tun. Eine Problemumgehung besteht darin, eine Größe auszuwählen, die definitiv größer als das Bild ist, und ein Wrapperlayout um die Ansicht mit dieser bestimmten Größe hinzuzufügen (mit der ursprünglichen Ansicht in der Mitte), dann können Sie die Hälfte davon berechnen. – Karu

+0

Negative Ränder! Ja! – RexSplode

Verwandte Themen