Порядок оценки с относительными компоновками, лучшими практиками и разбором относительных компоновок - PullRequest
3 голосов
/ 12 сентября 2011

Я прочитал это

» Раньше Android обрабатывал один проход RelativeLayout-определенные правила. Это означало, что вы не можете ссылаться на виджет (например, через android: layout_above), пока он не был объявлен в XML. это сделал определение некоторых макетов немного сложным. Начиная с Android 1.6, Android использует два прохода для обработки правил, так что теперь вы можете безопасно пересылать ссылки на пока не определенные виджеты. «

Я не знаю, в чем проблема, может быть, это проблема затмения, но даже я использую 2.3 У меня все еще есть проблемы, когда я ссылаюсь на какое-то представление, которое не объявлено как струя, поэтому для меня кажется, что Android не использует два прохода для обработки правила относительного размещения.

примечание: я всегда использую @ + id / widget_name, когда объявляю виджет, и @ id / widget_name, когда ссылаюсь на этот виджет из другого виджета. Я заметил, что могу использовать @ + id / widget_name, даже когда я просто хочу сослаться на этот виджет. Я думаю, что это неправильно, но почему иногда работает без каких-либо жалоб? По моему мнению, один виджет должен быть объявлен только один ...

Мои вопросы, действительно ли Android использует два прохода? и мне нужны некоторые рекомендации (лучшие практики) для работы с относительными макетами

Меня немного смущает вопрос о том, как создаются эти относительные компоновки, поэтому любые объяснения приветствуются

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

@+id/name создает новый идентификатор, если он еще не существует. @id/name ссылается на существующий идентификатор и никогда не создаст его.

Я не уверен, что вы можете использовать @id/name до @+id/name в том же файле. Если нет, я могу придумать два обходных пути:

  1. Всегда используйте @+id/name.

  2. Определите все идентификаторы в файле ids.xml и всегда используйте @id/name.

1 голос
/ 12 сентября 2011

Это - общая информация о том, как Android рисует представления. Я думаю, что Android дважды проходит через все представления, но не проходит через каждое представление по одному разу. Поэтому, если у вас есть ссылка из одного XML в другой, она всегда будет работать нормально, но если у вас есть ссылки внутри одного XML, вы должны быть осторожны, чтобы правильно расположить элементы в XML. Например, у меня есть view1 и view2 в моем RelativeLayout. Если я хочу обратиться к view2 из view1, я должен объявить view2 перед view1.

...