2012-03-22 2 views
27

Этот вопрос прослушивал меня в течение некоторого времени. Я уже разработал пару приложений на платформе Android и почему-то всегда прибегаю к Java-коду, чтобы построить макеты. В профессиональной среде разработки это приемлемо? Или должны ли XML-файлы подходить к подходу? Я обычно считаю XML более утомительным, и часто эти макеты не выглядят одинаково на всех устройствах. Я просто не понимаю. С профессиональной точки зрения, кто-нибудь действительно мог разрабатывать приложения со сложными представлениями, используя только XML-файлы? Этот вопрос убивает меня, потому что Google рекомендует использовать XML, но пользовательский интерфейс никогда не будет выглядеть одинаково на всех устройствах, если он не будет программным. Или я делаю что-то неправильно?Рекомендации: макеты на Android (Programmatic vs XML)

Обратите внимание, что я имею в виду Android 2.2 и 2.3, которые используют большинство пользователей.

ответ

28

Я использую XML-макеты практически для каждого фрагмента и активности каждого приложения, которое я пишу. Я очень редко вижу необходимость динамического создания представлений, настройки ListViews, отображения/скрытия представлений и т. Д., Которые нужно делать в коде. Для меня преимущество XML является:

  • Возможность использования макета редакторов (Eclipse)
  • Легче макетов предварительного просмотра
  • Возможности воспользоваться автоматической локализацией макетов
  • легко поддерживать различные параллельные макеты для разностные устройства (экраны)
  • Может получить представление о макете, глядя на нее (проще, чем код)
  • Легко разбивать макеты на куски (фрагменты, включая и т. д.), чтобы удалить дублирование
  • Сохраняет разделение между визуальным дизайном и функциональность за ним

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

Я ожидаю, что ваши макеты не выглядят одинаково, потому что ваш XML не правильно определяет макеты. Помните, что инструменты Android преобразуют XML-макеты в код, поэтому нет никакой проблемы с использованием XML-макетов по сравнению с динамическим - оба заканчиваются как код.

+0

Спасибо Олли. Я очень воодушевлен вашим XML-ориентированным подходом. Отчасти причина в том, что у меня довольно слабая система разработки, и я не могу работать с параллельными эмуляторами. Это одна из основных причин использования кода, а не XML, потому что я могу быть уверен, что мои макеты будут одинаковыми на всех устройствах. Otoh, если я использую XML, мне придется работать с эмуляторами, чтобы я мог протестировать каждый макет и фактически проверить, как выглядит пользовательский интерфейс. – OckhamsRazor

+0

Также, если у вас есть какие-либо проекты с открытым исходным кодом для Android, на которые я могу ссылаться? – OckhamsRazor

+0

Если вы посмотрите на образцы кода приложения Android в SDK или книги Mark Murphy (Commonsware), вы увидите множество примеров использования XML. Я использую физические устройства для тестирования - несколько из них обеспечивают высокое покрытие для типов экрана и ОС. Я не думаю, что это хорошая идея, чтобы медленная машина-разработчик повлияла на архитектуру ваших приложений. –

-1

Гораздо лучше отделить макет и поместить его в XML-файл. Иногда мне приходится корректировать макет кода, но это всегда исключение, и только когда я определяю, что это невозможно сделать в макете .xml. Если вы правильно используете представления макетов, приложение должно выглядеть очень похоже на всех устройствах.

6

я обычно делаю много работы с настраиваемой UIs, где большая его часть нужна быть сделана в коде. При этом, где это возможно, я стараюсь использовать фрагменты макета и раздувать их, так как разделы пользовательского интерфейса добавляются, удаляются или переупорядочены. Я все еще просто делаю часть макета, а не все.

Это, как говорится, не так сложно сделать макет по коду. Большим преимуществом для него является проверка времени компиляции. Я найду проблемы таким образом быстрее, чем использовать панель предварительного просмотра. Панель предварительного просмотра может быть приятной для первоначальной компоновки, но я использую средство просмотра иерархии, чтобы выяснить, почему мои макеты выглядят не так.

13

OckhamsRazor,

Ответ очень многое зависит от ваших потребностей, гибкость и знания.Первое, что нужно понять, это то, что каждый макет, созданный с помощью XML или программно, может быть специально настроен или сделан для соответствия многим экранам через свойства.

... и как-то всегда приходится прибегать к Java-коду, чтобы построить макеты. В профессиональной среде разработки это приемлемо?

Да, это так. Android делает их доступными, чтобы вы могли сделать именно это. Тем не менее, преимущества управления макетами через XML включают стандартную сегрегацию MVC, более простую отладку и более легкое изменение времени ресурса, если это необходимо. Кроме того, вы можете легко поддерживать несколько копий макетов в зависимости от конфигурации устройства.

... Кто-нибудь действительно смог разработать приложения со сложными видами, используя только XML-файлы?

Абсолютно! Есть несколько удивительных программ, которые полностью используют XML, а не программные представления. Ключом к ним является то, сколько информации (то есть свойства нестандартного вида) требуется из родительских представлений. Даже в тех случаях есть способы передать эту информацию, если вы знаете, где и как это сделать.

Или я что-то не так?

Я так не считаю. Честно говоря, я работал в обоих направлениях в зависимости от необходимости. Я бы сказал, что это действительно сводится к твоему недостатку знаний о причудах. Но задача -, чтобы выполнить эту работу. Вот пример: Есть несколько случаев, когда я не знаю, насколько все должно быть до его запуска на устройстве, и есть моменты, когда я делаю устройство соответствующим требованиям моего макета. В конечном счете, я использую следующую таблицу, чтобы сделать мои определения.

  • Нужен ли информация от родительских макетов, которое в стороне от просмотра свойств
  • мне нужно динамически размера больше, чем один элемента, независимо друг от друга делать.
  • Является ли тип вида предопределенным или он изменится?

Если ответ на 2 из 3 из них «да», я буду использовать некоторый уровень программной компоновки. Если нет, я пошлю чистый XML. При этом программирование является одной из тех профессий, которые поощряют изобретательность (при условии, что это безопасно), и почти все может быть достигнуто любым количеством способов. В конечном счете, я бы сказал, делайте то, что облегчает работу над качественными приложениями.

Google дает свои рекомендации на основе собственных знаний программистов и их общей практики. Они также создали платформу, поэтому они знают, какие вещи оптимизированы в каких направлениях. Все о опыте, и у всех нас есть свои. Если у вас есть проблемы с использованием XML, стоит потратить время, чтобы выяснить причуды просто так, чтобы это был другой инструмент для использования. Кроме того, он предоставит вам информацию, необходимую для ответа на этот вопрос.

Подводя итог: я мог бы сказать шоколад лучше, но если вам нравится ваниль, вы не согласитесь. Помните о недостатках и преимуществах каждого и найдите время, чтобы узнать, как выполнять одни и те же задачи с помощью обоих методов. Это сделает вас лучшим программистом и даст вам лучшее представление о том, когда использовать эту технику.

Надеется, что это помогает,

FuzzicalLogic

+0

Спасибо за вашу запись. У меня все еще есть вопрос о создании представлений программным способом, не так ли занимает больше памяти кучи, поскольку вам нужно определить все в java-коде и, следовательно, ждать выполнения GC для очистки памяти? В некоторых макетах не все элементы являются интерактивными, поэтому нет необходимости создавать для них обработчики. Если вы создадите эти макеты для кода, вам понадобятся обработчики. Если вы создаете его на xml, вам не нужны обработчики. – Simon

+0

У меня нет ответа на этот вопрос. Теоретически это сильно зависит от ваших обработчиков. Дело в том, что даже созданные XML-макеты используют обработчики prerender, render и postrender, но они в основном автоматически обрабатываются. Некоторые важные тесты должны быть выполнены, чтобы прийти к какому-либо заключению по этому поводу. Я могу сказать, что простые обработчики иногда более эффективны, но это может указывать на любой случай. –

2

Это действительно зависит от того, какого типа проекта является, или частью проекта, и какого типа программатора вы. Некоторые люди просто предпочитают чистый код, в то время как другие любят больше полагаться на другие инструменты для дизайна.

XML определенно имеет некоторые преимущества, например, возможность быстро переключаться между интерфейсами. Для конкретных тем дизайна, которые повторяются, определенно полезно для большинства программистов.

Я лично предпочитаю делать все программно, и мне быстрее развиваться, чем писать XML, с библиотеками и классами, которые я создал. XML быстрее из коробки.

Что касается производительности, то на самом деле нет никакой разницы, о которой стоит упомянуть, если вы не используете один и тот же вид так, чтобы он повторялся, в то же время, до такой степени, что он больше не подходит на экране много раз. Я проверил, сколько текстовых представлений Android может отображать на Moto X - Android 4.4, и он не может получить больше 5000, но для этого никогда не будет цели. Если вы находитесь в этот момент, вам нужно либо динамически загружать и выгружать данные, либо просто делать что-то очень неправильное для начала.

Так изучите их обе стороны, определенно узнайте все плюсы и минусы с вашим стилем программирования, потому что нет правильного ответа для всех, и пусть свободно и веселится.