Подтвердить что ты не робот

Как включить круговую ссылку в RelativeLayout?

У меня есть два виджета в 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" />

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

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

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

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

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

4b9b3361

Ответ 1

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

android:layout_toLeftOf="@+id/imgArrow"

Ответ 2

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

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