2011-04-15 12 views
13

Mam dwa widżety w RelativeLayout, które muszą się nawzajem odwoływać. Technicznie nie jest to odwołanie cykliczne ponieważ widget A jest dopasowany w pionie widget widget B i B jest poziomo wyrównane z widget A. Tu jest mój kodu (skrócone):Jak wymusić odwołanie cykliczne w RelativeLayout?

<Button android:id="@+id/btnLanguageFrom" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_toLeftOf="@id/imgArrow" 
      android:text="English" /> 

    <ImageView android:id="@+id/imgArrow" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignBottom="@id/btnLanguageFrom" 
      android:layout_centerHorizontal="true" 
      android:src="@drawable/arrow_right" /> 

Jednak kiedy zbudować mam ten błąd :

Error: No resource found that matches the given name (at 'layout_toLeftOf' with value '@id/imgArrow').

Co ciekawe, widok układu graficznego w Eclipse wyświetla go poprawnie i nie narzeka na odwołanie cykliczne.

Nie widzę problemu z dwoma widżetami odnoszącymi się do siebie w różnych wymiarach (poziomym i pionowym), ponieważ nie mogą one powodować nieskończonej pętli. Czy istnieje jakiś sposób obejścia tego problemu? To jedyny sposób, jaki znam, aby uzyskać potrzebny układ.

Z góry dziękuję, Barry P.S. Czy istnieje sposób na zadeklarowanie identyfikatora z wyprzedzeniem, jak w C/C++?

+0

Jestem pewien, że nie potrzebujesz "odwołania cyklicznego", jak to określisz. co próbujesz zrobić? – binnyb

Odpowiedz

27

Przy pierwszym odwołaniu się do identyfikatora użyj prefiksu @ +, który mówi budowniczemu zasobów, aby dodać identyfikator, zamiast próbować go znaleźć. Więc spróbuj:

android:layout_toLeftOf="@+id/imgArrow" 
+4

To działało, dziękuję! Nigdy nie przyszło mi do głowy, że mogę zadeklarować id, kiedy go przywołam. Bardzo dziękuję. –

1

Okrągłe odniesienie jest tym, czego chcesz uniknąć. Ale aby rozwiązać problem, wystarczy zmienić definicję swoich Button i ImageView, tak aby zdefiniowana ImageView, którą określasz w , zdefiniowana jest jako . Z pewnych powodów nie można tego zrobić w drugą stronę.

Dodatkowo zawsze używałbym tego samego rodzaju refernencji. Tak więc w twoim przypadku: "@+id/imgArrow"