Сегодня суббота, и давайте поговорим про стили и темы в Android🎨.
Наверное, начать стоит с того, в чём разница между стилем и темой.
По сути, стиль — это некоторый набор атрибутов для конкретной View. Лучше делать этот набор уникальным для каждого типа View, потому что набор атрибутов отличается.
Можно представить, что стиль — это Map<view attribute, resource>.
Тема - это набор именованных ресурсов, на которые позже можно будет ссылаться с помощью стилей, макетов и т.д.
Тема — это Map<theme attribute, resource>.
И набор этих атрибутов не применяется для конкретной View, а имеет более общий характер.
Начиная новый проект, нет причин не наследоваться от других тем, кроме как 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 стилей для текста, и к ним можно обратиться через атрибуты
textAppearance очень крутая штука, которая позволит, практически, избавиться от стилей для текстовых View. В своих проектах я не указываю размеры для текста напрямую в xml, это всегда делается через textAppearance.
В будущем, если ваше приложение захочет использовать другой шрифт — вам нужно будет просто переопределить стили textAppearance.
Важно помнить, что textAppearance поддерживает не все атрибуты, которые вы можете прописать в стиле. Проверьте, что поддерживает textAppearance перед добавлением своего свойства.
На самом деле, виден большой шаг в сторону дизайна в Android, важно немного разобраться в этом и использовать все преимущества🤟.
А что вы делаете в своём проекте, чтобы все визуальные элементы выглядели едиными?
• • •
Missing some Tweet in this thread? You can try to
force a refresh
До переезда в Сингапур, я постоянно откладывал поход в школы по изучению английского языка. Где-то в глубине душы, я понимал что для эмиграции язык необходим, но постоянно казалось что я еще успею его выучить, а более важные дела нельзя отложить.
После получения оффера, да, получил я его без знания английского, видимо специалист был хороший 😅, я начал осознавать свою роковую ошибку. Договорившись на 3 месяца удаленной работы чтобы закончить все свои дела в Спб, я ускоренно начал заниматься языком.
К большому счастью, Skyeng(НЕ реклама) уже работал, поэтому вопрос куда идти даже не всплывал. За 3 месяца занятий по 3 в неделю, я более менее научился связывать слова в предложения и спрашивать дорогу в булошную.
До FB я около 7 лет работал в клиентской разработке, успел поработать и в аутсорсе, и в стартапах, и в более менее зрелых компаниях. Но началось все относительно случайно. Живя в общаге ИТМО, от нечего делать, я решил установить на свой Асер Хакинтош...
Две недели без сна, минимум еды, много стресса, тонны прочитанных мануалов по бутлоадерам и прочим хакам и я получил отлично работающую версию OS X на моем ноуте. Почти под все железо я смог найти kextы, кроме дискретной видюхи.
Исследуя возможности, неизвестной на тот момент, системы, я запустил Xcode...с тех пор так его и использую. Первое мое приложение было рисовалка граффити для ВК, очень простое написанное в основном по туториалам и говнокодом.
Думаю рассказ про мой опыт с Kotlin Multiplatform (далее просто МП/MP) стоит начать с небольшого предисловия. Я занимаюсь разработкой приложения для отслеживания своей активности для лыжников и сноубордистов
У нас уже больше 1.5 года была вынесена часть логики в МП, это была логика определения состояния пользователя, будь то отдых, подъем на подъёмнике или райд. Там в основном алгоритмы, но не простые и хотелось иметь single source of truth на обеих платформах...
... что бы не фиксать разные баги на iOS и Android. Так как с точки кода это был не сложный модуль работало там все прекрасно, но потом мы решили что хотим пойти дальше и сделать так что бы на платформе остался только UI и какие то специфические сервисы
Итак, в 2018 году со мной случилось выгорание. Шла я нему несколько лет.
Так получилось, что в 2018 году у меня было несколько проектов, в которых я была задействована. Проекты были тогда интересными, и в той стадии, когда там много нового и полезного для тебя.
Проекты все были у разных партнеров и разных заказчиков. Суммарно моя загрузка в неделю занимала 60-80 часов. Почему столько? Потому что сначала мой менеджер попросил меня взять к обычной нагрузке еще что-то, а мне было интересно попробовать в себя в том проекте, куда звали
Да, едут на том, кто везет. Я везла, мне казалось, что так я себя показываю со стороны ответственного сотрудника. Но знаете, не все воспринимают это, положительное качество. С течением времени некоторые начинают наглеть.
Для начала разберемся, почему же человеку, уставшему и измотанному, так сложно вылезти из этого состояния. Дело в том, что мы привыкаем к такому состоянию. Чтобы не сдохнуть окончательно, организм начинает воспринимать это, как норму. Какое второе дыхание? Вы просто уже потеряли
связь с реальностью. Часто при выгорании страдает психика. Нет, вы не сразу начинаете бегать по потолку и разговаривать с электричеством. Но вы и ваша личность постепенно меняется. Обидчивость, агрессивность, временами неадекватная реакция, вы срываетесь не на тех.
Ок, вчерашний speech был про мой путь 👟 в IT и отношение к нему 🙂
А сегодня поговорим про А/B тесты 📊
А/B тесты - это важная часть работы над продуктом.
Тест позволяют сравнить несколько версий продукта и определить, как изменения влияют на целевые показатели, конверсию📏📉
Это эффективный способ проверки гипотез.
A/B тесты помогают принимать решения, основываясь на собранных данных и цифрах, используя мощь статистической теории, в противовес принятию решений, основанных на интуиции, домыслах
Помогают поставить точку, в случае наличия нескольких мнений, когда каждый продвигает свою точку зрения.
Они помогают измерять реальное поведение аудитории вашего продукта.
Защищают от того, чтобы выкатить в прод ухудщающие изменения