Как применить циклическую ссылку в RelativeLayout? - PullRequest
13 голосов
/ 15 апреля 2011

У меня есть два виджета в RelativeLayout, которые должны ссылаться друг на друга. Технически это не круговая ссылка, поскольку виджет A выровнен по вертикали с виджетом B, а виджет B выровнен по горизонтали с виджетом A. Вот мой код (сокращенно):

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

Однако при сборке я получаю эту ошибку:

Ошибка: ресурс не найден соответствует заданному имени (в 'layout_toLeftOf' со значением @ Идентификатор / imgArrow ').

Интересно, что представление «Графический макет» в Eclipse отображает его правильно и не жалуется на циклическую ссылку.

Я не вижу проблемы с двумя виджетами, ссылающимися друг на друга по разным измерениям (горизонтальному и вертикальному), поскольку он не может вызвать бесконечный цикл. Есть ли способ обойти эту проблему? Это единственный способ узнать макет, который мне нужен.

Спасибо заранее, Барри Постскриптум Есть ли способ объявить идентификатор заранее, как в C / C ++?

Ответы [ 2 ]

27 голосов
/ 15 апреля 2011

При первом обращении к идентификатору используйте префикс @ +, который сообщает сборщику ресурсов, чтобы добавить идентификатор, а не пытаться его найти. Так что попробуйте:

android:layout_toLeftOf="@+id/imgArrow"
1 голос
/ 15 апреля 2011

Циркулярная ссылка - это то, чего вы хотите избежать.Но чтобы решить вашу проблему, просто переключите определение ваших Button и ImageView так, чтобы ImageView, который вы ссылаетесь в Button, был определен первым.По некоторым причинам это невозможно сделать наоборот.

Кроме того, я бы всегда использовал один и тот же тип ссылки.Итак, в вашем случае: "@+id/imgArrow"

...