Сегодня суббота, и давайте поговорим про стили и темы в Android🎨.
Наверное, начать стоит с того, в чём разница между стилем и темой.
По сути, стиль — это некоторый набор атрибутов для конкретной View. Лучше делать этот набор уникальным для каждого типа View, потому что набор атрибутов отличается.
Можно представить, что стиль — это Map<view attribute, resource>.
Тема - это набор именованных ресурсов, на которые позже можно будет ссылаться с помощью стилей, макетов и т.д.
Тема — это Map<theme attribute, resource>.
И набор этих атрибутов не применяется для конкретной View, а имеет более общий характер.
Чуть больше информации об этой разнице можно почитать тут:
medium.com/androiddevelop…
Начиная новый проект, нет причин не наследоваться от других тем, кроме как MaterialComponents.
Взамен мы получаем поддержу новых виджетов, которые работают только в material theme, несколько новых атрибутов для цветов и классный сайт, который описывает всё, что связано с Material
Теперь давайте поговорим про нейминг тем.
Для начала стоит сделать базовую тему для приложения, называя её: Theme.AppName.Base
В ней стоит переопределить все параметры, которые не относятся к конкретным цветам приложения.
Это могут быть дефолтные стили для виджетов или textAppearance для текстов.
Я бы сюда включил два цвета: это цвет navigationBar и statusBar. Лучше сделать их прозначными, чтобы корректно поддерживать отступы при помощи insets.
Следующая тема, которую уже стоит прописать в манифесте — это Theme.AppName, которая наследуется от нашей базовой темы.
Здесь уже важно переопределить основные атрибуты цветов, чтобы во всех View использовать описанные атрибуты.
Очень важно не использовать прямые ссылки на цвета в стилях для View или напрямую в xml. Если вы так делаете, то лишаете себя возможности настройки темы, а также поддержи нескольких тем в приложении.
Конечно, есть исключения: например, если необходимо использовать цвет бренда во всех View, который никогда не поменяется (хотя я бы тут лучше сделал кастомный атрибут) или же вы делаете View, цвет которой используется только для неё.
Теперь давайте поговорим о стилях, и как лучше всего применить их.
Начните с того, что определите дефолтные стили для некоторых из виджетов, например для EditText, Button, Toolbar.
Пропишите их в Theme.AppName.Base, и этим действием вы сэкономите себе время в будущем.
Для стилей тоже важно сохранять нейминг.
Здесь всё просто: именуйте их в том стиле, в каком именуется её родитель.
Если вы наследуетесь от Widget.AppCompat.EditText, то назовите ваш стиль как Widget.AppName.EditText.
Следует также упомянуть про такую ведь как textAppearance. Они содержат в себе атрибуты, которые применимы только для текстовых View: цвет текста, шрифт, размер и т.д.
В Material Components сделали встроенную поддержку 13 стилей для текста, и к ним можно обратиться через атрибуты
Подробнее о них можно почитать тут:
material.io/develop/androi…
textAppearance очень крутая штука, которая позволит, практически, избавиться от стилей для текстовых View. В своих проектах я не указываю размеры для текста напрямую в xml, это всегда делается через textAppearance.
В будущем, если ваше приложение захочет использовать другой шрифт — вам нужно будет просто переопределить стили textAppearance.
Важно помнить, что textAppearance поддерживает не все атрибуты, которые вы можете прописать в стиле. Проверьте, что поддерживает textAppearance перед добавлением своего свойства.
На самом деле, виден большой шаг в сторону дизайна в Android, важно немного разобраться в этом и использовать все преимущества🤟.
А что вы делаете в своём проекте, чтобы все визуальные элементы выглядели едиными?

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Мобильный разработчик

Мобильный разработчик Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @mobileunderhood

27 Oct
Tuesday

До переезда в Сингапур, я постоянно откладывал поход в школы по изучению английского языка. Где-то в глубине душы, я понимал что для эмиграции язык необходим, но постоянно казалось что я еще успею его выучить, а более важные дела нельзя отложить.
После получения оффера, да, получил я его без знания английского, видимо специалист был хороший 😅, я начал осознавать свою роковую ошибку. Договорившись на 3 месяца удаленной работы чтобы закончить все свои дела в Спб, я ускоренно начал заниматься языком.
К большому счастью, Skyeng(НЕ реклама) уже работал, поэтому вопрос куда идти даже не всплывал. За 3 месяца занятий по 3 в неделю, я более менее научился связывать слова в предложения и спрашивать дорогу в булошную.
Read 33 tweets
26 Oct
Monday:

До FB я около 7 лет работал в клиентской разработке, успел поработать и в аутсорсе, и в стартапах, и в более менее зрелых компаниях. Но началось все относительно случайно. Живя в общаге ИТМО, от нечего делать, я решил установить на свой Асер Хакинтош...
Две недели без сна, минимум еды, много стресса, тонны прочитанных мануалов по бутлоадерам и прочим хакам и я получил отлично работающую версию OS X на моем ноуте. Почти под все железо я смог найти kextы, кроме дискретной видюхи.
Исследуя возможности, неизвестной на тот момент, системы, я запустил Xcode...с тех пор так его и использую. Первое мое приложение было рисовалка граффити для ВК, очень простое написанное в основном по туториалам и говнокодом.
Read 20 tweets
28 Jul
Думаю рассказ про мой опыт с Kotlin Multiplatform (далее просто МП/MP) стоит начать с небольшого предисловия. Я занимаюсь разработкой приложения для отслеживания своей активности для лыжников и сноубордистов
У нас уже больше 1.5 года была вынесена часть логики в МП, это была логика определения состояния пользователя, будь то отдых, подъем на подъёмнике или райд. Там в основном алгоритмы, но не простые и хотелось иметь single source of truth на обеих платформах...
... что бы не фиксать разные баги на iOS и Android. Так как с точки кода это был не сложный модуль работало там все прекрасно, но потом мы решили что хотим пойти дальше и сделать так что бы на платформе остался только UI и какие то специфические сервисы
Read 18 tweets
14 Jun
Итак, в 2018 году со мной случилось выгорание. Шла я нему несколько лет.
Так получилось, что в 2018 году у меня было несколько проектов, в которых я была задействована. Проекты были тогда интересными, и в той стадии, когда там много нового и полезного для тебя.
Проекты все были у разных партнеров и разных заказчиков. Суммарно моя загрузка в неделю занимала 60-80 часов. Почему столько? Потому что сначала мой менеджер попросил меня взять к обычной нагрузке еще что-то, а мне было интересно попробовать в себя в том проекте, куда звали
Да, едут на том, кто везет. Я везла, мне казалось, что так я себя показываю со стороны ответственного сотрудника. Но знаете, не все воспринимают это, положительное качество. С течением времени некоторые начинают наглеть.
Read 36 tweets
14 Jun
Да, это именно рецепт того, как вообще в выгорание не попасть. А что делать, когда вас затягивает болото выгорания, поговорим в треде ниже
Для начала разберемся, почему же человеку, уставшему и измотанному, так сложно вылезти из этого состояния. Дело в том, что мы привыкаем к такому состоянию. Чтобы не сдохнуть окончательно, организм начинает воспринимать это, как норму. Какое второе дыхание? Вы просто уже потеряли
связь с реальностью. Часто при выгорании страдает психика. Нет, вы не сразу начинаете бегать по потолку и разговаривать с электричеством. Но вы и ваша личность постепенно меняется. Обидчивость, агрессивность, временами неадекватная реакция, вы срываетесь не на тех.
Read 15 tweets
2 Jun
Ок, вчерашний speech был про мой путь 👟 в IT и отношение к нему 🙂

А сегодня поговорим про А/B тесты 📊

А/B тесты - это важная часть работы над продуктом.
Тест позволяют сравнить несколько версий продукта и определить, как изменения влияют на целевые показатели, конверсию📏📉
Это эффективный способ проверки гипотез.
A/B тесты помогают принимать решения, основываясь на собранных данных и цифрах, используя мощь статистической теории, в противовес принятию решений, основанных на интуиции, домыслах
Помогают поставить точку, в случае наличия нескольких мнений, когда каждый продвигает свою точку зрения.

Они помогают измерять реальное поведение аудитории вашего продукта.

Защищают от того, чтобы выкатить в прод ухудщающие изменения
Read 34 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!