Android — android верстка


Содержание

Лучшие программы дизайна на Андроид для рисования, вектора, Android Фотошоп и др.

Андроид — наиболее популярная мобильная ОС, которая установлена на миллионах устройств по всему миру. Поэтому не удивительно, что под нее есть достаточно много игр, утилит, приложений, в том числе и разных Android Apps для дизайнеров. Вы можете использовать их на средненьких китайских смартфонах, топовых девайсах по типу Google Pixel 2 XL или планшетах Samsung с пером S Pen.

Данная статья будет своего рода логическим продолжением подборки десктопных бесплатных аналогов Фотошопа, Иллюстратора, но только для мобильного рынка. Информация здесь (а также иллюстрации) позаимствованы из этой статьи. Мы немного сократили список, выбрав лишь лучшие решения и те, в которых получится работать без каких-либо финансовых затрат. Всего вышло чуть больше 10-ти приложений. Чтобы скачать программы дизайна на Андроид достаточно перейти по соответствующим ссылкам в их описании.

Adobe Illustrator Draw

  • + Легко освоить пользователям графического редактора Illustrator.
  • + Имеет множество полезных функций.
  • + Возможность интеграции с настольными решениями CC.

Adobe запустила свое приложение Adobe Illustrator Draw для векторной графики в Android устройствах еще в 2020 году, и до сих пор это практически единственная надежная программа для создания векторных рисунков на мобильных (если только вы не выберете планшет на базе Windows).

Разобраться с Illustrator Draw будет легко любому, кто уже знаком с его настольным собратом. При этом он не уступает ПК софту по количеству уникальных функций, включая настраиваемый стилус, управление несколькими слоями, опции слияния и т. д.

Конечно, разработчики Adobe надеются, что вместе с Illustrator Draw вы будете пользоваться сервисом Creative Cloud, который помогает повысить общую эффективность действий. Также здесь доступна моментальная отправка своих работ в Illustrator и Photoshop CC, поддерживается сервис стоковых изображений Adobe Stock и публикация проектов на сетевой платформе Behance.

Sketchbook

  • + Уникальные возможности рисования.
  • + 170 настраиваемых кистей.
  • + Группа инструментов, облегчающих работу (предсказуемые штрихи).

Компания Autodesk более известна 3D-приложениями, ведущими в своем классе, однако их новое детище Sketchbook – это, действительно, мощная программа, предоставляющая широкие возможности для творчества, например, для быстрого создания эскизов или имитации рисования красками.

Функциональные особенности включают: большое количество и разнообразие кистей (170 видов); полноценную работу со слоями, в том числе поддержку режима смешивания; совместимость с PSD файлами; предсказуемый штрих, помогающий делать линии и формы точными и четкими.

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

Adobe Photoshop Mix

  • + Невероятно прост в использовании.
  • + Полная совместимость с Photoshop CC.
  • — Слабоваты тонкие настройки.

Решение лучше подходит для широкого спектра задач, а не какой-то тонкой работы. Photoshop Mix позволяет вырезать и комбинировать элементы из различных изображений, смешивать слои и корректировать свои творения на Android устройстве. Вполне неплохая вариация приложения Фотошопа на Андроид.

Особенностью программы является ее простота и совместимость с Photoshop CC – при внесении изменений на телефоне, они мгновенно отобразятся на рабочем столе. Кроме того, вы можете воспользоваться всеми преимуществами CC с помощью Adobe Photography Plan – сэкономите при этом немного больше по сравнению с полной подпиской Creative Cloud.

Infinite Design

  • + Создание 3D изображений с помощью инструментов перспективы.
  • + Безграничный нескончаемый холст.
  • + Бесконечные слои, которые можно отменить/вернуть.

Разработчики Sean Brakefield полностью переделали свое приложение SVG векторной графики в Android под названием Infinite Design, выпущенное в 2020 году. С самыми последними обновлениями теперь это реальная альтернатива Adobe Illustrator Draw. Как следует из названия программы, его главными достоинствами являются безграничный холст (панорамирование, масштабирование или поворот), бесконечные слои и мощные возможности редактирования, в том числе отмены и повтора.

В приложении имеется множество фишек по работе со слоями: функция трансформации для масштабирования, поворота, наклона и других изменений. Но основная особенность – это создание 3D-изображений с помощью пяти инструментов перспективы. И еще одно небольшое полезное дополнение для пользователей Chromebooks – наличие горячих клавиш. Такой себе Android Фотошоп получается.

Adobe Photoshop Sketch

  • + Возможность превратить любую фотографию в кисть Sketch.
  • + Подходит тем, кто юзает CC.

Не смотря на то, что Photoshop Sketch является лишь одним из многих дизайн приложений в Android, оно вполне может оказаться в первых строчках у любого пользователя Creative Cloud благодаря тем преимуществам и набору разных опций, которые оно предоставляет.

Это отличная программа для создания эскизов с такими функциями, как режим наложения, перспективные сетки и естественные инструменты рисования. Нельзя не отметить фишку превращения любого фото в кисть с помощью Capture CC.

Adobe Comp CC

  • + Превращает эскизы в четкие макеты.
  • + Позволяет работать в любом удобном месте.
  • + Совместимо с набором софта от Adobe.

Никогда еще макеты и модели не создавались так легко, как с Adobe Comp. С помощью простых жестов (рукой или стилусом) вы можете сделать наброски, а приложение превратит их в профессиональный макет.

Эта программа для дизайна на Android устройствах просто незаменима для зарисовок налету во время совещаний или презентаций. Выбирайте векторные фигуры, изображения, цвета и стили текста, а потом отправляйте все Adobe Photoshop, Illustrator, InDesign или Muse, чтобы закончить работу на настольном ПК.

Infinite Painter

  • + Более 80 предустановочных кистей.
  • + Разные действия со слоями подобно Photoshop.
  • + Виды в перспективе для 3D объектов.

Не смотря на то, что по своим возможностям Infinite Painter слегка уступает лучшим приложениям для фотошопа на Android, однако в нем есть функции, которые отсутствуют в других аналогичных программах. Можно применять предустановочные кисти – их более 80, или создать новую кисть; работать со слоями и использовать режим наложения.

С помощью пяти видов перспектив у вас получится нарисовать полноценные 3D-изображения. Кроме того, имеющиеся инструменты позволят легко корректировать холст (переворачивать, наклонять и т. д.).

Find My Font

  • + Идентифицирует шрифты в любом месте прямо по ходу.
  • + В базе данных более 150 000 шрифтов.

Find My Font – оригинальное решение для распознавания шрифтов, изначально дебютировавшая как десктопный софт, куда импортируются фотографии с целью определения используемой типографики. Однако интеграция этого умного инструмента в мобильные устройства открыла новые горизонты – теперь пользователи могут в любое время и в любом месте идентифицировать интересные варианты шрифтов дабы внедрить их в своих проектах.

Благодаря огромной базе данных (свыше 150 000 фонтов) эта программа для дизайна на Андроид способна распознать связанные и отдельные буквы и получить максимально точные результаты вплоть до размера текста.

Adobe Capture CC

  • + С помощью искусственного интеллекта предлагает аналогичные шрифты.
  • + Создает геометрические узоры на основе авторского изображения.
  • + Совместимость с CC.

Для дизайнера Adobe Capture – это как незаменимый швейцарский нож Swiss Army Knife у солдата. Приложение дает неограниченные возможности при работы с векторами, кистями и формами. Capture оснащена инновационной технологией от Adobe – искусственным интеллектом для распознавания типовых форм и предложения визуально сходных шрифтов.

Кроме того, с помощью этого дизайн приложения в Android можно мгновенно создавать геометрические узоры из любого изображения или цветовую палитру из фотографий. А благодаря аккаунту в Creative Cloud ваши творения мгновенно станут доступны в настольном софте Adobe, который вы используете.


Sketcher Free

  • + Отличный инструмент отбора.
  • + Высокая отзывчивость дисплея при рисовании.
  • + Возможность установки дополнительных опций, подобных приложению Sketcher Pro (например, регулирование размера холста или панорамирование/масштабирование).

В Sketcher Free для «процедурного рисования» есть 12 кистей, богатая цветовая палитра и ластик. Однако главным достоинством программы по праву является пользовательский интерфейс с отличным набором полезных фишек.

Color Reference

  • + Создание и экспорт цветовых палитр.
  • + Выбор цвета с изображений.
  • + Множество предустановочных вариантов.

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

Итого. В статье рассмотрели разные дизайн приложения в Android по типу Фотошопа, Иллюстратора и т.п. софта, помогающие в работе с вектором, рисунками, шрифтами, эскизами. Надеемся они вам пригодятся. Все мобильные программы бесплатны.

Если знаете еще какие-то интересные альтернативы фотошопу в Android или любые другие решения, полезные для дизайнеров, пишите названия/ссылки ниже.

7 лучших HTML-редакторов для Andro > Попробуйте и вы.

Редактор Вебмастера Lite

Этот достаточно простой редактор, поддерживающий не только HTML-файлы, но и JavaScript, CSS, PHP. Здесь вы не найдете каких-то интересных возможностей, зато базовые вещи здесь реализованы невероятно качественно. Среди них такие простые радости жизни, как подсветка синтаксиса, нумерация строк, удобный проводник и кнопки быстрого доступа. Кроме того, Редактор Вебмастера Lite поддерживает доступ к файлам FTP.

В общем, прекрасное бесплатное приложение для исполнения ваших основных веб-потребностей. Есть небольшой минус — за то, чтобы снять ограничение по размеру кода и открыть доступ к предпросмотру, придется заплатить 199₽.

AWD — сокращение от Android Web Developer, и это уже куда более мощный продукт. Помимо стандартных JavaScript, CSS, PHP, HTML, он поддерживает JSON, а также позволяет управлять проектами на FTP, FTPS, SFTP и WebDAV.

Здесь также есть подсветка синтаксиса, автодополнение кода, нумерация строк, функция просмотра, поиск и замена функций, автосохранение, интеграция с Git, разного рода форматирование текста и многое другое.

Здесь вы можете скачать это приложение.

DroidEdit

DroidEdit — по сути, клон Notepad++ для Windows. Кроме стандартного набора языков, данный редактор также поддерживает C, C++, C#, Java, Python, Ruby, Lua, LaTeX и SQL. Кроме того, мое личное мнение, в данном приложении лучше всего реализована подсветка синтаксиса с точки зрения контрастности и цветов.

Платная версия обойдется вам всего в 149 рублей, но если вам действительно приходится часто кодить на ходу — это сущие мелочи. В качестве бонуса за щедрость вы также получите доступ к Dropbox и Google Drive, таким образом сможете напрямую сохранять свои проекты в облако.

Но если вам это не надо, можно и скачать бесплатную версию. Прямо отсюда.

Quoda Code Editor

Не самый известный редактор даже в данном рейтинге, но всё же присмотритесь к нему. Первая причина — огромное количество поддерживаемых языков: ActionScript, C, C++, C#, CSS, Haskell, HTML, Java, JavaScript, Lisp, Lua, Markdown, Objective-C, Perl, PHP, Python, Ruby, SQL, Visual Basic и XML. Вторая причина — масса полезных бонусов, таких как шаблоны или готовые куски кода, настройка «горячих клавиш» для увеличения вашей производительности, автопроверка кода и многое другое.

К сожалению, как и в случае с DroidEdit, полная версия стоит денег — 225 рублей. Но и ограниченная версия должна вам очень понравиться.

Jota Text Editor

Ну а если вам надоели все эти навороченные редакторы кода, то вот вам простой и мощный инструмент для работы с HTML (и не только). Около 5 миллионов скачиваний и рейтинг, близкий к максимальному, наглядно демонстрируют качество работы с Jota Text Editor. За нулевые вложения вы получаете элементарный редактор, способный лишь определять и подсвечивать синтаксис, а также ограничение в миллион символов. Но надо ли вам больше?

Если нет, то тогда устанавливайте Jota.

Еще одна аббревиатура в названии (AIDE — Android Integrated Development Environment), скрывающая большие возможности разработки. Это некое руководство по созданию приложений для Android, от мобильных до игровых. При этом, это не просто собрание лекций и видео, а полноценный редактор с возможностями отладки, верификации и тестирования.

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

Главное, не забыть скачать себе на мобильное устройство AIDE.

anWriter

Закончим рейтинг бесплатным HTML-редактором с поддержкой CSS, JavaScript и Latex. Это в бесплатной версии. Если заплатите 210 рублей, получите также поддержку PHP и SQL. Кроме того, в комплекте вы найдёте совместимость с HTML 5, CSS 3, jQuery, Bootstrap и Angular, возможности работы с FTP и Google Drive.

В общем, переходите прямо сейчас по ссылке и наслаждайтесь.

А вы пользуетесь мобильными редакторами кода?

Как вы используете свой Android-смартфон? Звоните, фотографируете, играете, переписываетесь, читаете новости? Пора ему помочь вам и в вашей работе веб-разработчика! Вот 7 наиболее популярных и качественных HTML-редакторов из Play Store.

Редактор Вебмастера Lite

Этот достаточно простой редактор, поддерживающий не только HTML-файлы, но и JavaScript, CSS, PHP. Здесь вы не найдете каких-то интересных возможностей, зато базовые вещи здесь реализованы невероятно качественно. Среди них такие простые радости жизни, как подсветка синтаксиса, нумерация строк, удобный проводник и кнопки быстрого доступа. Кроме того, Редактор Вебмастера Lite поддерживает доступ к файлам FTP.

В общем, прекрасное бесплатное приложение для исполнения ваших основных веб-потребностей. Есть небольшой минус — за то, чтобы снять ограничение по размеру кода и открыть доступ к предпросмотру, придется заплатить 199₽.

AWD — сокращение от Android Web Developer, и это уже куда более мощный продукт. Помимо стандартных JavaScript, CSS, PHP, HTML, он поддерживает JSON, а также позволяет управлять проектами на FTP, FTPS, SFTP и WebDAV.

Здесь также есть подсветка синтаксиса, автодополнение кода, нумерация строк, функция просмотра, поиск и замена функций, автосохранение, интеграция с Git, разного рода форматирование текста и многое другое.

Здесь вы можете скачать это приложение.

Цукерберг рекомендует:  Бесплатка Иконки на тему Месяца и времена года

DroidEdit

DroidEdit — по сути, клон Notepad++ для Windows. Кроме стандартного набора языков, данный редактор также поддерживает C, C++, C#, Java, Python, Ruby, Lua, LaTeX и SQL. Кроме того, мое личное мнение, в данном приложении лучше всего реализована подсветка синтаксиса с точки зрения контрастности и цветов.

Платная версия обойдется вам всего в 149 рублей, но если вам действительно приходится часто кодить на ходу — это сущие мелочи. В качестве бонуса за щедрость вы также получите доступ к Dropbox и Google Drive, таким образом сможете напрямую сохранять свои проекты в облако.

Но если вам это не надо, можно и скачать бесплатную версию. Прямо отсюда.

Quoda Code Editor

Не самый известный редактор даже в данном рейтинге, но всё же присмотритесь к нему. Первая причина — огромное количество поддерживаемых языков: ActionScript, C, C++, C#, CSS, Haskell, HTML, Java, JavaScript, Lisp, Lua, Markdown, Objective-C, Perl, PHP, Python, Ruby, SQL, Visual Basic и XML. Вторая причина — масса полезных бонусов, таких как шаблоны или готовые куски кода, настройка «горячих клавиш» для увеличения вашей производительности, автопроверка кода и многое другое.

К сожалению, как и в случае с DroidEdit, полная версия стоит денег — 225 рублей. Но и ограниченная версия должна вам очень понравиться.

Jota Text Editor

Ну а если вам надоели все эти навороченные редакторы кода, то вот вам простой и мощный инструмент для работы с HTML (и не только). Около 5 миллионов скачиваний и рейтинг, близкий к максимальному, наглядно демонстрируют качество работы с Jota Text Editor. За нулевые вложения вы получаете элементарный редактор, способный лишь определять и подсвечивать синтаксис, а также ограничение в миллион символов. Но надо ли вам больше?


Если нет, то тогда устанавливайте Jota.

Еще одна аббревиатура в названии (AIDE — Android Integrated Development Environment), скрывающая большие возможности разработки. Это некое руководство по созданию приложений для Android, от мобильных до игровых. При этом, это не просто собрание лекций и видео, а полноценный редактор с возможностями отладки, верификации и тестирования.

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

Главное, не забыть скачать себе на мобильное устройство AIDE.

anWriter

Закончим рейтинг бесплатным HTML-редактором с поддержкой CSS, JavaScript и Latex. Это в бесплатной версии. Если заплатите 210 рублей, получите также поддержку PHP и SQL. Кроме того, в комплекте вы найдёте совместимость с HTML 5, CSS 3, jQuery, Bootstrap и Angular, возможности работы с FTP и Google Drive.

В общем, переходите прямо сейчас по ссылке и наслаждайтесь.

А вы пользуетесь мобильными редакторами кода?

Верстка мобильного приложения под Andro >

Необходимо сверстать макет для мобильного приложения под Андройд.

Суть приложения: пользователи публикуют вопросы, на которые другие пользователи могут давать ответы. Ответы можно принимать и отклонять, ставить оценки, писать комментарии. Как следствие в макете есть экраны:
— экран списка вопросов
— экран конкретного вопроса с ответами на него
— экран публикации вопроса
— экран профиля пользователя и пр.
В результате макет насчитывает около десятка экранов (точное количество зависит от того, как воспринимать модифицикации, экраны для разных ролей и пр.).

Веб-версия проекта работает 2 года.
Ссылка на веб-версию сервиса, дополнительная информация и макеты будет выслана по запросу.

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

Пример макета одного из экранов – в атаче.

Серверная часть разрабатывается самостоятельно – разработчиками сервиса. Работа над версткой приложения будет вестись в контакте с нашим программистом, пишущим «костяк» приложения.

Адаптивная верстка для мобильных устройств

Дисклаймер: материал был написан до того, как адаптивная верстка стала трендом.

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

Взял верстку с ходу. Верстал всё в процентах. Но при отображении в мобильном устройстве (Android и IOs) верстка выглядела немного странно. Больше всего раздражал маленький размер шрифта текста для абзацев. Отсюда и возникла идея написания этого совета. Итак, разберем всё по частям и найдем самое оптимальное решение, чтобы не выглядело как «на костылях».

Итак, для верстки нам потребуются следующие элементы:

  1. Общее понимание разрешений мобильных устройств.
  2. Задание размера viewport.
  3. СSSи MediaQuery.

Общее понимание разрешений мобильных устройств

Да, это именно так. Яндекс выдает нам множество вариантов. Становится ясно, что разрешений очень много. Верстать под все разрешения нет возможности.

Почти все браузеры, которые есть на мобильных устройствах, могут и используют ресайз страниц. Ресайз они делают на основе технических данных, получаемых от устройства. Их три:

  1. devicePixelRatio
  2. screen.width
  3. screen.height

Эти три параметра могут дать нам море информации. Пишем простую функцию:

Например на Iphone мы увидим «2 320 568 640 1136», на айпад «2 768 1024 1536 2048». Lenovo P780 cообщит «1,5 360 640 540 960». Т.е. ширины экранов у перечисленных устройств будут 640, 1536, 540 пикселей соответственно. Делаем выводы: нам надо сделать версию для экранов, например, меньше 986 пикселей (стандарт для узких мониторов). Образно говоря, будет две верстки. Одна для экранов с разрешением более 986 пикселей, другая — для меньших. Особенности CSS-верстки будут описаны в последнем разделе.

Задание размера viewport

О viewport можно найти в поиске много мусора. Почти везде идет ширпотреб без объяснения логики. На самом деле тут всё очень просто:

Вьюпорт (viewport) — это видимая часть окна браузера (мобильного или десктопного).

Размер вьюпорта можно менять, используя следующую конструкцию в head:

Для верстки используем только два параметра width и user-scalable. Первым задаем размер видимой части, второй разрешает ее увеличивать (применять zoom двумя пальцами).

Обозначив w >

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

Более подробно про viewport можно прочитать в статье «Адаптация сайта на мобильных устройствах».

СSS и MediaQuery в мобильной верстке

MediaQuery разжевано на множестве сайтов, уделять внимание описанию не будем. Лишь опишем ряд проблем в виде маленького ЧАВО.

Какой диапазон выбрать для MediaQuery при адаптивной верстке?

В работе мы использует три брекпоинта для носимых устройств: 1024px, 800px, 420px. Это рекомендация, вы можете спокойно добавить свои.

Мелкий текст в адаптивной/мобильной верстке сайта.

Решение: стоит увеличить размер шрифта в соответствии с devicePixelRatio или просто в 1,5 раза. Например, так:

Изменяется размер шрифта при смене ориентации/вращении мобильного устройства.

Гироскопом уже никого не удивишь, его ставят китайцы даже в самые дешевые смартфоны. Удивить можно верстальщика. Решение:

Сбрасываем форматирование для элементов форм

Каждый браузер должен, нет, просто обязан быть уникальным. Исправляем косяк с различным форматированием элементов форм, отменяя дефолтные стили браузера. А уже дальше делаем, как на душе лежит.

Safari в IOs увеличивает шрифты в верстке

Mobile Safari в Ios (а также Chrome для Android, Mobile Firefox и IE Mobile) автоматически увеличивают размер шрифта внутри широких блоков. Это можно пофиксить двумя строчками CSS:

LiteCoding


Заметки о программировании

Верстка для Andro >without comments

В рекомендациях от Google есть ряд полезных советов, используя которые можно найти хорошие решения проблемы верстки под все многообразие разрешений экрана, встречающихся на аппаратах с Android. Но для начала нужно понять, в чем именно заключается вся сложность верстки. У нас есть 10 разрешений, несколько типичных размеров экранов (включая планшеты с диагоналями 7 и 10 дюймов), несколько значений плотности размещения точек на экране. Все эти величины связаны между собой жесткими соотношениями.

Опираться только на разрешение экрана очень опасно, поскольку экраны с одним разрешением, но разной плотностью размещения точек имеют разные размеры. Так можно оказаться в ситуации, когда элемент графического интерфейса будет мелким и неудобным в использовании. Решение в данном случае есть, и оно довольно простое — использовать dip (density-independent pixel) в качестве единицы измерений. Dip — это логическая точка, которая позволяет не задумываться о плотности размещения физических точек. Формула, связывающая эти величины, проста:

pixels = dps * (density / 160)

pixels — размер в физических точках
dps — размер в логических точках (dip)
density — плотность размещения элементов экрана в физических точках на дюйм

Рекомендации, на которые я сослался в самом начале, выражены в следующих 4х пунктах:

  • Использовать wrap_content, fill_parent или dip вместо физических точек
  • Не использовать AbsoluteLayout
  • Не использовать физические точки в коде
  • Использовать ресурсы, специфичные для разных параметров экрана

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

Второй пункт носит больше методический характер, нежели практический. Класс данного контейнера объявлен устаревшим, потому он может в будущем исчезнуть из SDK и сред исполнения. К тому же, без этого класса можно обойтись. Путем несложных манипуляций точно такой же эффект получается с помощью FrameLayout или RelativeLayout.

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

Если в нашем приложении есть экран без прокрутки (например, экран с иконками в официальном клиенте твиттера), есть смысл попробовать прием, описанный ниже.

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

После пересчета физических точек в логические мы получим очень интересный результат — количество разрешений сократилось с 8 до 7 (точнее, с 10 до 9, т.к. в таблице не представлены mdpi-экраны с разрешением 1024×576 и 1024×600). И это уже хороший результат, но можно добиться лучшего. В большинстве случаев две неширокие неактивные полосы (в отличие, от «обрезанного» экрана) не вызовут дискомфорта у пользователей. Именно поэтому мы можем группировать близкие логические разрешения. Например, так:

Также можно объединить первую группу со второй, а третью — с четвертой. Конечное разбиение на группы зависит от каждого конкретного приложения, для которого все выполняется. Для каждой из групп понадобится сетка расположения элементов (т.е. смещения и размеры в логических точках) на наименьшем логическом разрешении группы. По этой каждой сетке создается XML-файл с размещением элементов.

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

Далее я покажу пример для следующих групп:

  • 320×426(.6), 320×480
  • 320×533(.3), 320×569(.3), 320×576
  • 480×800, 480×856
  • 1024×576, 1024×600

В первой группе у нас находятся экраны с низкой и средней плотностью, и оба не являются «длинными» (соотношение меньшей стороны к большей лежит в диапазоне 0.66..1), в отличие от всех остальных, поэтому для нее правильный путь к XML следующий: res/layout-notlong/layout.xml. Если первую группу придется разбивать, правильные спецификаторы будут следующими: small-notlong (или просто small) и normal-notlong (можно normal-notlong-mdpi).

Точно так же для второй группы следует выбрать спецификатор normal (поскольку спецификатор предыдущей группы notlong более узкий, нежели normal) или normal-long. Третью группу описывает спецификатор large, а четвертую — xlarge.

Не забывайте, что данные спецификаторы относятся только к размещению элементов графического интерфейса (т.е. к «сетке»). Для графических ресурсов каждой группы будет свой набор спецификаторов, о чем я расскажу в одной из следующих статей миницикла.

Остается единственный вопрос: как разместить сверстанный блок элементов по центру экрана и что делать с пустым местом по краям экрана?

Можно поступить так: внешний контейнер растянуть на весь экран, и для него задать фоновый цвет или изображение, а во внутреннем контейнере разместить все необходимые элементы (в отличие от приведенного ниже примера, для внутреннего контейнера лучше указать ширину и высоту как wrap_content).

А оценить разницу в изображении на экранах первой группы можно на следующих скриншотах (серая рамка к экрану не относится, «подложка» имеет красный фон, рабочая область — черный):

SavePearlHarbor

Ещё одна копия хабора

Верстка Android макетов без боли

На iPhone layout задаются абсолютно и всего под два экрана iPhone 4 и iPhone 5. Рисуем два макета, пишем приложение и накладываем полупрозрачные скриншоты на макеты. Проблем нет, воля дизайнера ясна, проверить что она исполнена может сам разработчик, тестировщик или, даже, билд-сервер.

Под Android у нас две проблемы: нельзя нарисовать бесконечное число макетов и нельзя сверить бесконечное число устройств с конечным числом макетов. Дизайнеры проверяют вручную. Разработчики же часто понятия не имеют как правильно растягивать элементы и масштабировать шрифты. Количество итераций стремится к бесконечности.

Чтобы упорядочить хаос мы пришли к следующему алгоритму верстки. Макеты рисуются и верстаются под любой флагманский full-hd телефон. На остальных красиво адаптируются. Готовое приложение проверяет дизайнер на популярных моделях смартфонов. Метод работает для всех телефонов, для планшетов (>6.5 дюймов) требуются отдельные макеты и верстка.

Под рукой у меня только Nexus 4 возьмем его характеристики экрана для примера.

Макеты ненастоящего приложения-портфолио которые будем верстать (полноразмерные по клику).

Layout

Основную верстку делаем через вложенные LinearLayout. Размеры элементов и блоков в пикселях переносим с макета в weight и weightSum соответственно. Отступы верстаем FrameLayout или в нужных местах добавляем Gravity.

Для примера сверстаем ячейку списка приложений:

Дальше нам потребуется много DisplayMetrics-магии, напишем для него static helper.

1184 это высота Nexus 4 без кнопок, 768 — ширина. Эти значения используются, чтобы выяснить во сколько раз высота и ширина устройства, на котором запущено приложение, отличаются от эталонного.

ScrollView и List

Подход с weightSum не примемим к прокручивающимся элементам, их внутренний размер вдоль прокрутки ничем не ограничен. Для верстки ScrollView и List нам потребуется задать их размеры в коде (130 — высота элемента списка).

И дальше можно применять трюк с weightSum.

Картинки

Размер иконок приложений задается в коде:

Где 240 высота элемента списка, 20 высота отступа сверху и снизу.

Шрифты

Андроид не предоставляет единицу измерения пропорциональную размеру экрана. Размеры шрифтов рассчитываем на основании диагонали устройства:

Да, размеры шрифта придется задавать в коде (36 размер шрифта в пикселях на оригинальном макете).

Советы по работе с графикой

1. Используйте Nine-patch везде где возможно, где невозможно — перерисуйте дизайн.
2. Простые элементы рисуйте с помощью Shape
3. Избегайте масштабирования изображений в runtime

Nine-patch это графический ресурс содержащий в себе мета-информацию о том как он должен растягиваться. Подробнее в документации Android или на Хабре.


Nine-patch нужно нарезать под все dpi: ldpi mdpi tvdpi hdpi, xhdpi, xxhdpi. Растягивание ресурсов во время работы приложения это плохо, а растягивание Nine-Patch приводит к неожиданным артефактам. Ни в коем случае не задавайте в Nine-patch отступы, они оформляются отдельными элементами layout, чтобы растягиваться пропорционально контенту.

Shape

Если ресурс легко раскладывается на простые геометрические фигуры и градиенты лучше вместо нарезки использовать xml-shape. Для примера нарисуем фон рамку вокруг проекта в списке, которую мы выше нарезали как Nine-patch.

Картинки

Масштабирование графики силами Android трудоемкая и затратная по памяти операция. Картинки внутри Android обрабатываются как bitmap. Например, наш логотип в размере 500×500 со сплешскрина распакуется в bitmap размером 1мб (4 байта на пиксель), при масштабировании создается еще один bitmap, скажем в 500кб. Или 1,5мб из доступных 24мб на процесс. Мы не раз сталкивались с нехваткой памяти в богатых на графику проектах.

Цукерберг рекомендует:  Компьютер и ОС для программиста

Поэтому картинки которые нельзя описать ни Nine-patch ни Shape я предлагаю поставлять в приложении как огромный ресурс в папке nodpi и при первом запуске масштабировать изображение до нужного размера и кешировать результат. Это позволит нам ускорить работу приложения (не считая первого запуска) и уменьшить потребление памяти.

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

P.S. советы придуманы и основа поста написаны нашим Android-гуру Лешей, огромное ему спасибо!

А как вы рекомендуете верстать макеты под Android? Сколько макетов рисует дизайнер? Как обращаетесь с графическими ресурсами?

Подписывайтесь на наш хабра-блог (кнопка справа вверху). Каждый четверг интересные статьи о мобильной разработке, маркетинге и бизнесе мобильной студии. Следующая статья (5 сентября) «C# async на iOS и Android»

Android — android верстка

Любая Activity (деятельность, окно приложения) состоит из Views и ViewGroups. View — виджет, который рисуется на экране, например, кнопка, текстовое поле, список. Все такие виджеты наследуются от класса android.view.View.
ViewGroup — разметка, позволяющая расположить один или несколько View. Разметки наследуются от класса android.view.ViewGroup, который в свою очередь наследуется от android.view.View. Это значит что дочерними элементами разметки могут быть не только View, но и сами разметки

Примеры ViewGroups:
— FrameLayout
— LinearLayout
— TableLayout
— RelativeLayout
— ScrollView

Рассмотрим их более подробно.

FrameLayout

FrameLayout — разметка для отображения одного элемента. Дочерние View или ViewGroup в FrameLayout выравниваются по верхнему левому углу. Разметка может содержать несколько элементов, но тогда они будут перекрывать друг друга. Например:

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «wrap_content»
  4. android:layout_height = «wrap_content»
  5. android:text = «@string/Button»
  6. />
  7. >
  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «wrap_content»
  4. android:layout_height = «wrap_content»
  5. android:src = «@drawable/image»
  6. />
  7. android:layout_width = «wrap_content»
  8. android:layout_height = «wrap_content»
  9. android:text = «@string/Button»
  10. />
  11. >

FrameLayout удобно использовать для нескольких элементов, которые скрываются и показываются программно, таким образом что в каждый момент времени видимым оказывается только один из них. Для управления видимостью элемента используется атрибут android:visibility в xml или метод setVisibility (int visibility), где visibility принимает одно из трех значений:
VISIBLE — элемент видим
INVISIBLE — элемент невидим, но все еще занимает место в разметке
GONE — элемент невидим и не занимает место в разметке

LinearLayout

Разметка для отображения одного или нескольких элементов в одну линию, горизонтально или вертикально. Для выбора ориентации используется атрибут android:orientation с двумя возможными значениями «horizontal» и «vertical»

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «vertical»
  4. >
  5. android:layout_width = «wrap_content»
  6. android:layout_height = «wrap_content»

  7. android:text = «@string/Button»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «@string/Button»
  16. /> >
  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «horizontal»
  4. >
  5. android:layout_width = «wrap_content»
  6. android:layout_height = «wrap_content»
  7. android:text = «@string/Button»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «@string/Button»
  16. /> >

TableLayout

Разметка для расположения элементов в виде таблицы. Ряды задаются в xml с помощью тега TableRow, а ячейки в каждом ряду создаются автоматически для каждого элемента. Количество колонок в таблице будет равно максимальному количеству элементов в рядах. То есть если в одном ряду 3 элемента, а во втором 1, то колонок в TableLayout будет 3. Ширина колонки определяется по самому широкому элементу в ней. Ячейки таблицы можно оставлять пустыми, или объединять. Атрибут android:layout_column — задает в какой столбец поместить данный элемент (нумерация столбцов начинается с 0). Атрибут android:layout_span — позволяет объединить указанное количество столбцов (ряды объединить нельзя)

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:src = «@drawable/image»
  7. android:layout_column = «1»
  8. /> >
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»

  15. android:text = «@string/Button»
  16. /> >
  17. android:layout_width = «wrap_content»
  18. android:layout_height = «wrap_content»
  19. android:text = «@string/Button»
  20. android:layout_span = «2»
  21. /> > >

RelativeLayout

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

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:id = «@+id/image»
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:src = «@drawable/image»
  7. android:layout_centerHorizontal = «true»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:layout_toLeftOf = «@id/image»
  12. android:text = «@string/Left»
  13. />
  14. android:layout_width = «wrap_content»
  15. android:layout_height = «wrap_content»
  16. android:layout_toRightOf = «@id/image»
  17. android:text = «@string/Right»
  18. />
  19. >

Возможные атрибуты элементов:
Расположение относительно родительского элемента. Значением атрибута является «true»
android:layout_alignParentTop — верхняя граница элемента располагается на верхней границе RelativeLayout
android:layout_alignParentLeft — левая граница элемента располагается на левой границе RelativeLayout
android:layout_alignParentRight — правая граница элемента располагается на правой границе RelativeLayout
android:layout_alignParentBottom — нижняя граница элемента располагается на нижней границе RelativeLayout
android:layout_centerInParent — элемент располагается в центре родительского по горизонтали и вертикали
android:layout_centerHorizontal — элемент располагается в центре родительского по горизонтали
android:layout_centerVertical — элемент располагается в центре родительского по вертикали

Расположение относительно других элементов, значением атрибута является id другого элемента.
android:layout_above — элемент располагается сверху от другого элемента
android:layout_toLeftOf — элемент располагается слева от другого элемента
android:layout_toRightOf — элемент располагается справа от другого элемента.
android:layout_below — элемент располагается снизу от другого элемента.
android:layout_alignBaseline — базовая линия элемента выравнивается по базовой линии другого элемента
android:layout_alignTop — верхняя граница элемента выравнивается по верхней границе другого элемента
android:layout_alignLeft — левая граница элемента выравнивается по левой границе другого элемента
android:layout_alignRight — правая граница элемента выравнивается по правой границе другого элемента
android:layout_alignBottom — нижняя граница элемента выравнивается по нижней границе другого элемента

ScrollView

ScrollView является наследником класса FrameLayout. Отличием является то, что он позволяет прокручивать элементы, если они занимают больше места чем физический размер экрана. В ScrollView также может содержаться только один элемент (View или ViewGroup), чаще всего используется LinearLayout, в которого вложено несколько элементов. Scrollview поддерживает только вертикальную прокрутку.

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «fill_parent»
  4. android:layout_height = «wrap_content»
  5. android:orientation = «vertical» > >
  6. >

Мы рассмотрели основные виды разметок в android. Комбинируя и вкладывая их друг в друга можно создать интерфейс любой сложности.

Атрибуты элементов

Во всех View которые вкладываются в ViewGroup есть атрибуты позволяющие управлять их размерами или расположением. Основные из них:

android:layout_width и android:layout_height

Ширина и высота элемента. Атрибут может принимать следующие значения:
fill_parent — элемент имеет размер такой же как и родительский элемент
wrap_content — элемент имеет размер по своему содержимому
точное значение размера. Размер может указываться в следующих единицах:
dp — (Density-independent Pixels) — абстрактная единица, основанная на плотности экрана. На устройствах с экраном 160dpi: 1dp=1px. Это соотношение будет меняться на экранах с другой плотностью, причем необязательно в прямой пропорции. Таким образом обеспечивается согласованность размеров элементов интерфейса на различных устройствах.


sp — (Scale-independent Pixels) — единица измерения похожая на dp, однако она также масштабируется учитывая пользовательские настройки шрифта.

px — пиксели. Не рекомендуется использовать эту единицу измерения, так как представление элемента может различаться в зависимости от устройства. Так если мы задаем ширину элемента 100px, то на устройствах с экраном 320×240 это будет почти полэкрана, а на устройствах 800×480 — меньше четверти экрана.

pt — (points) 1/72 дюйма

Последние три единицы измерения не зависят от разрешения и диагонали экрана.
1in = 25.4mm = 72pt

На скриншоте показано как выглядят кнопки на разных размерах экрана

android:layout_gravity

Атрибут определяющий как данный View позиционируется внутри родительского элемента. Основные значения: top, bottom, left, right, center. Значение у элемента может быть одно или несколько (тогда они разделяются «|»).
Важно не путать android:layout_gravity и android:gravity. android:gravity — определяет позиционирование внутри самого элемента, а android:layout_gravity — позиционирование элемента внутри родительского.

android:layout_margin

А также android:layout_marginLeft, android:layout_marginRight, android:layout_marginTop, android:layout_marginBottom. Атрибут определяет отступ элемента от соседних элементов (или от границы родительского)

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «vertical» >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:text = «without margin»
  7. />
  8. android:layout_width = «wrap_content»
  9. android:layout_height = «wrap_content»
  10. android:text = «marginLeft=30dp»
  11. android:layout_marginLeft = «30dp»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «marginTop=30dp»
  16. android:layout_marginTop = «30dp»
  17. /> >

Для отступа внутри элемента используются атрибуты
android:padding, android:paddingLeft, android:paddingRight, android:paddingTop, android:paddingBottom

android:weight

Атрибут определяет соотношение в котором будет распределятся пространство для элементов разметки.

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «horizontal» >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:text = «weight=1»
  7. android:layout_weight = «1»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «weight=2»
  12. android:layout_weight = «2»
  13. /> >

У первой кнопки weight=1, у второй weight=2, таким образом ширина первой 1/3 экрана, а второй 2/3 экрана. На скриншоте это соотношение может быть неочевидным, так как при отрисовки элементов учитывается их ширина (в нашем случае wrap_content). Если поставить ширину обеим кнопкам andro , то вторая кнопка будет ровно в два раза длиннее первой. Если мы хотим чтобы длина кнопок была одинаковой, необходимо поставить им одинаковый вес (причем неважно какой).

Если атрибут layout_weight поставить только у одного элемента, то он займет максимум свободного пространства. Так на первом скриншоте у трех кнопок andro

Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Andro >

Продолжаем изучать основы разработки приложений с использованием языка Kotlin.

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

Как правило, каждый экран в вашем приложении для Android связан с одним классом Java или Kotlin, известным как Activity. Этот термин можно перевести как активность или деятельность, но мы будем использовать термин активити, без перевода. Единственный экран с отображенным «Hello World» создается с помощью активити MainActivity.kt. Это активити было создано средой разработки, когда вы создали свой новый проект. Каждое видимое активити в приложении для Android имеет макет, который определяет пользовательский интерфейс для активити. Android Studio имеет редактор макетов, в котором вы можете создавать и определять макеты.

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

1 . Редактор макета в Android Studio

Каждый элемент в макете представляет собой view, или представление. В этой задаче изучим интерфейс редактора макетов в Android Studio и разберемся, как изменять значения свойств для view.

Что вы узнаете

  • Как использовать редактор макетов.
  • Как установить значения свойств.
  • Как добавить строковые ресурсы.
  • Как добавить цветовые ресурсы.

Откройте редактор макета

  1. Найдите и откройте папку, в которой хранятся все макеты res/layout.
  2. Дважды щелкните файл разметки макета экрана activity_main.xml.Панель справа, называемая редактором макетов , отображает содержимое этого файла.
  3. В нижней части панели обратите внимание на две вкладки: « Дизайн и текст» . Откройте вкладку «Текст».XML-код, определяющий макет, отображается на вкладке «Текст».
  4. Откройте вкладку «Дизайн», чтобы отобразить визуальный редактор макета.
  5. В правом верхнем углу редактора макета вы видите кнопки + и для увеличения и уменьшения масштаба. Используйте эти кнопки для настройки вида или нажмите кнопку Zoom to Fit Screen (справа от кнопок масштабирования), чтобы обе панели соответствовали вашему экрану. На этом скриншоте макет дизайна слева показывает, как ваше приложение появляется на устройстве. Схема чертежа , показанная справа, представляет собой схематический вид макета.
  6. Используйте значки компоновки в левом верхнем углу панели инструментов дизайна, чтобы отобразить проектный вид, вид чертежа или оба вида вместе.
  7. Используйте значок ориентации, чтобы изменить ориентацию макета.
  8. Используйте меню выбора устройства, чтобы увидеть, как будет выглядеть макет на разных андроид-устройствах.

Изучите и измените размер дерева компонентов

  1. Посмотрите на дерево компонентов в левом нижнем углу вкладки «Дизайн».
    На этой панели отображается иерархия представлений view в вашем макете.
  2. Отрегулируйте стороны панелей так, чтобы вы могли видеть все в Дереве компонентов.
  3. Щелкните значок «Закрыть панель» в правом верхнем углу дерева компонентов.Панель Component Tree закрывается.
  4. Верните панель Component Tree, щелкнув по вертикальной метке «Дерево компонентов» слева.Теперь, когда вы знаете, как изменять размер, закрывать и открывать панель Component Tree, пришло время изучить иерархии представлений view.

Исследуйте иерархии представлений view

  1. В дереве компонентов обратите внимание, что корень иерархии представлений view представляет собой компонент разметки ConstraintLayout.Каждый макет должен иметь корневой view, содержащий все остальные view. Корневой view всегда представляет собой группу представлений ViewGroup, которая представляет собой view, которое содержит другие view. ConstraintLayout — один из примеров группы представлений ViewGroup. Его название содержит слово constraint – ограничения, и это отражает суть взаимодействия элементов, добавляемых в этот корневой view. Познакомится с другими корневыми элементами разметки, такими как RelativeLayout, LinearLayout и другими можно по ссылкам в описании видео. /linearlayout-i-relativelayout-osobennosti-maketov-ekranov-android/

Далее в этом уроке мы рассмотрим работу с ConstraintLayout более подробно.

  1. Обратите внимание, что ConstraintLayout содержит TextView.
  2. Просмотрите XML-код для макета, щелкнув вкладку « Текст » в нижней части вкладки «Дизайн».
  3. В коде XML обратите внимание, что корневой элемент . Корневой элемент содержит один

Изменение значений свойств

  1. На вкладке «Текст» изучите свойства элемента TextView.Пока что не беспокойтесь о каких-либо инструментах и свойствах макета – мы рассмотрим их позже.
  1. Измените значение свойства text в кавычках на любое.
  2. Вернитесь на вкладку «Дизайн».
  3. Выберите TextView в дереве компонентов .
  1. Посмотрите на панель «Свойства» справа.

Устранение неполадок этого шага :

  • Если панель «Свойства» не отображается, щелкните вертикальную метку « Свойства» в правом верхнем углу.
  • Если панель свойств отличается от отображаемой, щелкните значок « Просмотреть все свойства»,чтобы переключить представление.
  1. В текстовом поле TextView на панели «Свойства» снова измените значение текста и нажмите « Ввод»,чтобы завершить выбор
  2. Вернитесь на вкладку «Текст», чтобы убедиться, что текст был изменен в XML.
  3. Запустите приложение, чтобы увидеть изменение.

Изменение свойств отображения текста

  1. На вкладке «Дизайн» разверните поле textAppearance для TextView.
  2. Измените некоторые свойства текста. Например, измените семейство шрифтов, увеличьте размер текста и выберите жирный стиль. (Возможно, вам потребуется прокрутить панель, чтобы увидеть все поля.)
  3. Измените цвет текста. Щелкните в поле textColor и введите букву g. Появится меню с возможными значениями завершения. Этот список содержит предварительно определенные цвета. Позже разберемся, как быстро определить свои собственные цвета.
  4. Выберите @andro >
  5. На вкладке «Текст» просмотрите XML для TextView. Вы видите, что новые свойства были добавлены.

Если вы видите ошибку «Hardcoded string should use @string resource,» не беспокойтесь, вы скоро узнаете, как исправить это.

  1. Запустите приложение еще раз.

Показать все свойства

  1. Вернитесь на вкладку «Дизайн». В правом верхнем углу панели «Свойства» щелкните значок « Просмотреть все свойства» . Если вы не видите никаких свойств, убедитесь, что TextView все еще выбран в дереве компонентов. Панель «Свойства» обновляется, чтобы показать все свойства TextView.
  2. Прокрутите список, чтобы получить представление о свойствах, которые вы можете установить для TextView.

2. Добавление строковых и цветовых ресурсов

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

Что вы узнаете

  • Как извлечь значения свойств в ресурсы.
  • Как определяются ресурсы.
  • Добавление и использование цветовых ресурсов.
  • Результаты изменения высоты и ширины макета.

Извлечение ресурсов

  1. На панели «Проект» слева откройте в папке res /values файл строковых ресурсов strings.xml . Файл strings.xml открывается в редакторе. Не беспокойтесь, если увидите уведомление о редактировании переводов.Этот файл содержит элемент , который, в свою очередь, содержит один элемент , определяющий имя приложения.
  2. Вернитесь к файлу макета activity_main.xml. Убедитесь, что вы находитесь на вкладке «Текст». Обратите внимание, что свойство text выделено.
  3. Нажмите выделенный код. Слева появляется лампочка.
  4. Нажмите лампочку. В появившемся меню выберите « Извлечь строковый ресурс» .
  5. В появившемся диалоговом окне имя ресурса отражает текущее значение строки. Измените имя ресурса на hello_world_text и нажмите « ОК» .
  6. На вкладке «Текст» обратите внимание, что значение свойства andro >
  7. Перейдите обратно в файл strings.xml. Обратите внимание, что появился новый строковый ресурс hello_world_text.
  8. В файле strings.xml измените значение ресурса строки hello_world_text на Hello Universe (или на текст по вашему выбору).
  9. Вернитесь к activity_main.xml. Вы видите, что значение свойства text остается @string/hello_world_text .
  10. Запустите приложение, чтобы убедиться, что текст отображается так, как вы написали.

Теперь вы знаете, как создавать новые строковые ресурсы, извлекая их из существующих значений полей. Вы также можете добавить новые ресурсы в файл strings.xml вручную.

Добавить цветовые ресурсы

Теперь разберемся, как добавлять новые цветовые ресурсы.

Изменение цвета текста и фона TextView

  1. На панели «Проект» слева в папке res/values откройте файл цветовых ресурсов colors.xml. Файл colors.xml открывается в редакторе. В нем определено три цвета. Это основные цветовые ресурсы для оформления приложения в стиле материального дизайна. Более подробно о принципах материального дизайна смотрите по ссылке. /urok-1-kak-obnovlyat-vashi-prilozheniya-do-osobennostej-material-design/
  2. Вернитесь к Activity_main.xml на вкладке «Текст», чтобы вы могли увидеть XML-код макета.
  3. Добавьте новое свойство в TextView под названием andro >
  4. Выберите цвет @ colorPrimaryDark.
  5. Измените свойство andro >

Добавить новый цвет для использования в качестве цвета фона экрана

  1. Вернитесь в colors.xml, добавьте новый цветовой ресурс:

Этот цвет желтый.

  1. Вернитесь на вкладку «Дизайн» в Activity_main.xml. В дереве компонентов выберите ConstraintLayout.
  2. На панели «Свойства» отобразите все свойства. Выберите свойство Background и нажмите Enter . Введите «c» в появившемся поле.
  3. В появившемся меню выберите цвет @color/screenBackground . Нажмите « Enter», чтобы завершить выбор.
  4. Дважды щелкните желтый значок слева от значения цвета в поле Background. Откроется страница «Цвета» в редакторе ресурсов, в которой отображается список цветов, определенных в вашем проекте, а также цвета, определенные платформой Android. Он также предлагает интерактивный выбор цвета.
  5. Не стесняйтесь изменять значение цвета screenBackground , но убедитесь, что окончательный цвет заметно отличается от colorPrimary и colorPrimaryDark.

Исследуйте свойства ширины и высоты

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

  1. Перейдите на вкладку «Дизайн» для Activity_main.xml. В дереве компонентов выберите ConstraintLayout.
  2. На панели «Свойства» отображается минимизированный вид свойств. Переключитесь на значок « Просмотреть все свойства», если нужно. Значения Layout_width и layout_height установлены в match_parent . ConstraintLayout является корневым представлением, поэтому размер «родительского» макета фактически является размером экрана на устройстве. ConstraintLayout будет иметь ту же ширину и высоту, что и экран.

Совет. Все представления должны иметь свойства layout_width и layout_height .

  1. На вкладке «Дизайн» обратите внимание, что весь фон экрана использует цвет экрана .
  2. Теперь выберите TextView и измените ширину и высоту на match_parent .TextView заполняет весь экран, потому что его ширина и высота такие же, как и ConstraintLayout, который, в свою очередь, заполняет весь экран.
  3. Посмотрите, что произойдет, если ширина match_parent, а высота — wrap_content и наоборот.
  4. Установите как ширину, так и высоту TextView обратно в wrap_content .

3. Добавим views и constraints (ограничения)

В этой задаче вы добавите три кнопки в свой пользовательский интерфейс, как показано здесь.

Что вы узнаете

  • Как добавить новые view в макет.
  • Как ограничить позицию представления другим view.

Просмотр свойств ограничений

  1. На вкладке «Текст» просмотрите свойства ограничения для TextView. Эти свойства определяют положение TextView. Прочтите их внимательно.Вы можете ограничить верхнюю, нижнюю, левую и правую стороны сверху, снизу, слева и справа от других view. В этом случае единственное другое view — это корневой ConstraintLayout, который является родительским элементом этого TextView.
  2. На вкладке «Дизайн» выберите TextView в дереве компонентов и посмотрите на Inspector Constraint в верхней части панели «Свойства». Каждая из синих точек представляет собой constrain — ограничение.
  3. Обратите внимание, что в представлении чертежа также показаны ограничения при выборе определенного view. Переместите курсор над представлением проекта, и он также отобразит ограничения.

Добавьте кнопки и ограничьте их позиции

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

  1. Обратите внимание на палитру в левом верхнем углу редактора компоновки. Переместите стороны так, чтобы вы могли видеть многие элементы в палитре.
  2. Прокрутите перечисленные элементы, чтобы получить представление о том, что доступно.
  3. Выберите кнопку , которая находится рядом с верхней частью, и перетащите ее на макет проекта, поместив ее под TextView.

Обратите внимание, что кнопка добавлена ​​в дерево компонентов под ConstraintLayout.

Добавьте ограничение на кнопку

Теперь вы ограничиваете верхнюю часть кнопки до нижней части TextView.

  1. Переместите курсор по кругу в середине верхней части кнопки.
  2. Перетяните круг в верхней части кнопки на круг в нижней части TextView. Кнопка перемещается вверх, чтобы разместиться чуть ниже TextView. Верхняя часть кнопки теперь ограничена нижней частью TextView.
  1. Взгляните на инспектора ограничений на панели «Свойства». Он показывает одно ограничение для кнопки.
  2. На вкладке «Текст» ознакомьтесь с кодом XML для кнопки. Он включает атрибут, который ограничивает верхнюю часть кнопки до нижней части TextView, а также имеет верхний отступ, который был добавлен автоматически.

Добавьте вторую кнопку

  1. Добавьте еще одну кнопку в макет и поместите ее куда угодно. (Не беспокойтесь, если она улетит куда-нибудь в макете)
  2. Играйте с позициями и ограничениями двух кнопок. Попробуйте добавить и удалить ограничения.

Чтобы удалить ограничение:

  • В представлении «Дизайн» переместите курсор по кругу для ограничения, пока круг не станет красным, а затем щелкните по нему.
  • Или на панели «Свойства» переместите курсор по кругу для ограничения, пока он не покажет x, а затем щелкните по нему.

Если вы удалили ограничение и хотите его вернуть, отмените действие или создайте новое ограничение.

  1. Когда разберетесь, как добавлять и удалять ограничения, добавьте ограничения, чтобы разместить кнопки в их конечной позиции. Левая кнопка должна находиться слева, а правая кнопка — справа на экране. Вертикально обе кнопки отображаются между TextView и нижней частью экрана (см. Рисунок ниже).Сделайте это, добавив ограничения на две кнопки, чтобы соблюдались условия:
  • верхняя часть каждой кнопки ограничена нижней стороной TextView.
  • нижняя часть каждой кнопки ограничена нижней стороной экрана.
  • левая часть левой кнопки ограничена левой стороной экрана.
  • правая часть правой кнопки ограничена правой стороной экрана.

Добавьте третью кнопку

Добавьте третью кнопку между двумя существующими кнопками.

  1. Добавьте третью кнопку.
  2. Сдвиньте левую и правую стороны новой кнопки на соседние кнопки.
  3. Ограничьте верхнюю и нижнюю части новой кнопки так же, как существующие кнопки. Другими словами, верхняя часть новой кнопки ограничена нижней стороной TextView. Низ ограничен нижней стороной экрана.
  4. Изучите XML-код на вкладке «Текст». У каждой из кнопок есть атрибут:app:layout_constraintVertical_bias
    Ограничения «смещения» позволяют сместить положение view на большее значение, чем на другой стороне, когда обе стороны ограничены в противоположных направлениях . Например, если верхняя и нижняя стороны view ограничены по верху и низу экрана, вы можете использовать вертикальное смещение, чтобы поместить view ближе к верхней, чем к нижней части экрана.
  5. Код XML для новой кнопки, скорее всего, появится ниже кода двух других кнопок в файле XML. Переместите код для новой кнопки, чтобы он находился между двумя другими кнопками, таким образом порядок кнопок в файле XML отражает порядок, который они отображают в дизайне. Это изменение не влияет на функциональность или внешний вид макета, но это поможет вам сопоставить представления на вкладке «Текст» с представлениями на вкладке «Дизайн».

Вот код XML для макета. В вашем макете могут быть немного другие поля и, возможно, некоторые ограничения по вертикали или горизонтали. Точные значения атрибутов для внешнего вида TextView также могут отличаться у вас.

Android — android верстка

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1

Блог компании Touch Instinct,
Разработка под Android*,
Mobile Development*
Разрабатывать интерфейс Android приложений — непростая задача. Приходится учитывать разнообразие разрешений и плотностей пикселей (DPI). Под катом практические советы о верстке макетов дизайна Android приложений в Layout, который совпадает с макетом на одном устройстве а на остальных растягивается без явных нарушений дизайна: выхода шрифтов за границы; огромных пустых мест и других артефактов.

На iPhone layout задаются абсолютно и всего под два экрана iPhone 4 и iPhone 5. Рисуем два макета, пишем приложение и накладываем полупрозрачные скриншоты на макеты. Проблем нет, воля дизайнера ясна, проверить что она исполнена может сам разработчик, тестировщик или, даже, билд-сервер.

Под Android у нас две проблемы: нельзя нарисовать бесконечное число макетов и нельзя сверить бесконечное число устройств с конечным числом макетов. Дизайнеры проверяют вручную. Разработчики же часто понятия не имеют как правильно растягивать элементы и масштабировать шрифты. Количество итераций стремится к бесконечности.

Чтобы упорядочить хаос мы пришли к следующему алгоритму верстки. Макеты рисуются и верстаются под любой флагманский full-hd телефон. На остальных красиво адаптируются. Готовое приложение проверяет дизайнер на популярных моделях смартфонов. Метод работает для всех телефонов, для планшетов (>6.5 дюймов) требуются отдельные макеты и верстка.

Под рукой у меня только Nexus 4 возьмем его характеристики экрана для примера.

Макеты ненастоящего приложения-портфолио которые будем верстать (полноразмерные по клику).

Основную верстку делаем через вложенные LinearLayout. Размеры элементов и блоков в пикселях переносим с макета в weight и weightSum соответственно. Отступы верстаем FrameLayout или в нужных местах добавляем Gravity.

Для примера сверстаем ячейку списка приложений:

andro
andro
andro
andro
andro
andro
andro >

andro
andro
andro
andro
andro
andro >

andro
andro
andro
andro />

Дальше нам потребуется много DisplayMetrics-магии, напишем для него static helper.

public class S <
private static final int ORIGINAL_VIEW_W > private static final int ORIGINAL_VIEW_HEIGHT = 1184;
private static final int ORIGINAL_VIEW_DIAGONAL = calcDiagonal(ORIGINAL_VIEW_WIDTH, ORIGINAL_VIEW_HEIGHT);

private static int mWidth;
private static int mHeight;
private static int mDiagonal;
private static float mDensity;

static <
DisplayMetrics metrics = TouchinApp.getContext().getResources().getDisplayMetrics();
mW > mHeight = metrics.heightPixels;
mDiagonal = calcDiagonal(mWidth, mHeight);
mDensity = metrics.density;
>

public static int hScale(int value) <
return (int)Math.round(value * mWidth / (float) ORIGINAL_VIEW_WIDTH);
>

public static int vScale(int value) <
return (int)Math.round(value * mHeight / (float) ORIGINAL_VIEW_HEIGHT);
>

public static int dScale(int value) <
return (int)Math.round(value * mDiagonal / (float) ORIGINAL_VIEW_DIAGONAL);
>

public static int pxFromDp(int dp) <
return (int)Math.round(dp * mDensity);
>

private static int calcDiagonal(int width, int height) <
return (int)Math.round(Math.sqrt(width * width + height * height));
>
>

1184 это высота Nexus 4 без кнопок, 768 — ширина. Эти значения используются, чтобы выяснить во сколько раз высота и ширина устройства, на котором запущено приложение, отличаются от эталонного.

ScrollView и List

Подход с weightSum не примемим к прокручивающимся элементам, их внутренний размер вдоль прокрутки ничем не ограничен. Для верстки ScrollView и List нам потребуется задать их размеры в коде (130 — высота элемента списка).

if (view == null) <
view = mInflater.inflate(R.layout.item_app_list, viewGroup, false);
view.setLayoutParams(new AbsListView.LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, S.dScale(130)));
>

И дальше можно применять трюк с weightSum.

Размер иконок приложений задается в коде:

view.findViewById(R.id.appImg).setLayoutParams(new LinearLayout.LayoutParams(S.dScale(240) — S.pxFromDp(20), S.dScale(240) — S.pxFromDp(20)));

Где 240 высота элемента списка, 20 высота отступа сверху и снизу.

Андроид не предоставляет единицу измерения пропорциональную размеру экрана. Размеры шрифтов рассчитываем на основании диагонали устройства:

textSizePx = originalTextSizePx * (deviceDiagonalPx / originalDeviceDiagonalPx )

Да, размеры шрифта придется задавать в коде (36 размер шрифта в пикселях на оригинальном макете).

Советы по работе с графикой

1. Используйте Nine-patch везде где возможно, где невозможно — перерисуйте дизайн.

2. Простые элементы рисуйте с помощью Shape

3. Избегайте масштабирования изображений в runtime

Nine-patch это графический ресурс содержащий в себе мета-информацию о том как он должен растягиваться. Подробнее в документации Android или на Хабре.

Nine-patch нужно нарезать под все dpi: ldpi mdpi tvdpi hdpi, xhdpi, xxhdpi. Масштабирование ресурсов во время работы приложения это плохо, а масштабирование Nine-Patch приводит к неожиданным артефактам. Ни в коем случае не задавайте в Nine-patch отступы, они оформляются отдельными элементами layout, чтобы растягиваться пропорционально контенту.

Если ресурс легко раскладывается на простые геометрические фигуры и градиенты лучше вместо нарезки использовать xml-shape. Для примера нарисуем фон рамку вокруг проекта в списке, которую мы выше нарезали как Nine-patch.

Масштабирование графики силами Android трудоемкая и затратная по памяти операция. Картинки внутри Android обрабатываются как bitmap. Например, наш логотип в размере 500×500 со сплешскрина распакуется в bitmap размером 1мб (4 байта на пиксель), при масштабировании создается еще один bitmap, скажем в 500кб. Или 1,5мб из доступных 24мб на процесс. Мы не раз сталкивались с нехваткой памяти в богатых на графику проектах.

Поэтому картинки которые нельзя описать ни Nine-patch ни Shape я предлагаю поставлять в приложении как огромный ресурс в папке nodpi и при первом запуске масштабировать изображение до нужного размера и кешировать результат. Это позволит нам ускорить работу приложения (не считая первого запуска) и уменьшить потребление памяти.

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

http:// /media/img/movies/vposter/plain/22741680/ _ .jpg

P.S. советы придуманы и основа поста написаны нашим Android-гуру Лешей, огромное ему спасибо!

А как вы рекомендуете верстать макеты под Android? Сколько макетов рисует дизайнер? Как обращаетесь с графическими ресурсами?

Подписывайтесь на наш хабра-блог (кнопка справа вверху). Каждый четверг интересные статьи о мобильной разработке, маркетинге и бизнесе мобильной студии. Следующая статья (5 сентября) «C# async на iOS и Android»

Сложная верстка Andro > Вопрос задан: 6 лет назад Последняя активность: 6 лет назад

Мне нужно сделать макет с 4 TextView.

Первый TextView размещается с левой стороны экрана, второй TextView может иметь разные размеры, третий TextView размещается после второго textView и четвертый TextView размещается с правой стороны экрана.

Если второе TextView короткое, после третьего TextView добавляет пустое пространство, например:

Если второй TextView длинный, он имеет размер. в конце:

Как я могу написать этот макет в XML? Я должен использовать LinearLayout или TableLayout лучше? Можете привести примеры?

2 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Вы можете использовать RelativeLayout для выравнивания текстовых представлений так, как вы хотите, используя атрибуты layout_alignParentLeft, layout_alignParentRight и layout_toRightOf. Второй TextView может быть спроектирован требуемым образом с использованием атрибутов maxWidth, ellipsize, singleLine в TextView. Макет будет примерно таким:

Также вы можете найти пример проекта разных макетов вот

Цукерберг рекомендует:  15 полезных Bootstrap компонент
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих