2012-05-01 14 views
25

Mam doświadczenie z RelativeLayout, ale nigdy nie natknąłem się na sposób rozwiązania problemu, który mi przedstawiono (oprócz sztywnych wartości marginesów kodowania, które chcę ., aby uniknąć)Android RelativeLayout wyrównanie środka jednego widoku w prawym górnym rogu innego widoku

chcę spróbować stworzyć coś podobnego do poniższego obrazu w RelativeLayout:

enter image description here

pudełko jest swój własny pogląd i chcę, aby uzyskać widok zawierający pomarańczowy okrąg do wyśrodkowania w prawym górnym rogu widoku zawierającego niebieskie pole.

Próbowałem z android:alignTop="boxView" i android:alignRight="boxView", ale to spowodowało, że moje pomarańczowe kółko znalazło się całkowicie w moim pudełku. Chcę, aby było tak, aby okrąg był wyśrodkowany powyżej prawego górnego rogu okna.

Ktoś wie, w jaki sposób mogę uzyskać ten wynik za pomocą RelativeLayout? najlepiej bez konieczności ustawiania marginesów kodu z dala od krawędzi ekranu dla widoku kropki pomarańczowej.

+0

Dlaczego nie chcesz używać tego marginesu. Margines wydaje się być idealnym sposobem na osiągnięcie tego. – Bobbake4

+0

Nie chcę tylko dawać mu marginesu na odległość od krawędzi ekranu. Gdybym mógł dopasować go do pudełka, a następnie przesunąć go w górę iw górę o połowę jego średnicy z marginesem, który byłby idealny. Ale mogę tylko dowiedzieć się, jak to zrobić, mówiąc, jak daleko od krawędzi ekranu, a nie jak daleko od punktu, który chcę ustawić na. – FoamyGuy

Odpowiedz

29

Ten kod tworzy to, czego szukasz, ale korzysta z marginesów. Teraz możesz ustawić margines w kodzie, jeśli jest to dynamiczna struktura, którą tworzysz. Jak widać, użyłem ujemnych marginesów, aby przesunąć górny prawy kształt poza niebieskie pole. To musi być połowa wysokości koła, które próbujesz przenieść. Możesz zrobić to wszystko w kodzie, aby wyśrodkować okrąg w prawym górnym rogu.

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

Nie wiedziałem o ujemnych marginesach. Perfekcyjnie, dziękuję. – FoamyGuy

+0

Należy zauważyć, że tak naprawdę nie działa, jeśli drugi widok jest wielkości przez obraz, ponieważ rysunki nie mają stałego rozmiaru w DP (ich rozmiar w pikselach przeskakuje z jednego wiadra DPI do następnego zamiast ciągłego skalowania). Więc nie możesz po prostu zrobić 26dp/2 = 13dp. Jedno obejście polega na wybraniu rozmiaru, który jest zdecydowanie większy niż obraz, i dodaniu układu owinięcia wokół widoku o tym określonym rozmiarze (z oryginalnym wyśrodkowanym w nim widokiem), a następnie można obliczyć połowę tego. – Karu

+0

Margines ujemny! Tak! – RexSplode

Powiązane problemy