constant part
Предопределённые части названия, которые диктуются спецификой android разработки и никогда не меняются
required part
Часть названия, которая задается в зависимости от условий использования
optional part
Часть, которая добавляется при необходимости что-либо уточнить
Если после рефакторинга ресурс перестает принадлежать какому-то функционалу, он должен быть переименован в соответствии с этими правилами.
Например иконка называлась auth_key_icon, но потребовалось использовать ее вне сценария авторизации.
Такая иконка должна быть переименована в key_icon.
Если архитектура приложения подразумевает разделение на модули, нужно перенести переименованную иконку в соответствующий модуль.
[what i do]_[duration/speed/etc]
Примеры:
fade_outslide_up
[designer's color name]
Цвет из Miro или дизайн системы[color]_opacity_[opacity percent]
Любой цвет[color place]_[color]_opacity_[opacity percent]
Цвет, который привязан к какому-то конкретному элементу интерфейса
Примеры:
sme_dark_greyC14brand_bluewhite_opacity_70divider_black_opacity_85
В Compose цвета описываются в отдельном object.
Пример:
KnowledgeBaseColor
Цвета именуются по аналогии с формой наименования ресурсов в color.xml, но с использованием CamelCase.
[Designer's color name]
Цвет из Miro/Figma или дизайн системы[Color]_[opacity percent]
Любой цвет, который также может обладать определенной прозрачностью[Color][Dark/Light postfix]_[opacity percent]
Цвет, который встречается в более светлом/темном виде можно выделить ключевыми словами[Color place][Color]_[opacity percent]
Цвет, который привязан к какому-то конкретному элементу интерфейса
Примеры:
GreyGreyLightRed_90ShimmerPrimary
icon/shape/image/selector_[what i show]_[size_dp]
Drawable-ресурс, который используется повсеместно в приложении[feature]_ icon/shape/image/selector _[what i show]_[size_dp]
Drawable-ресурс, который используется только в рамках какого-то функционала
Примеры:
icon_arrowshape_search_result_backgroundauth_icon_key
В Compose Drawable-ресурсы описываются в отдельном object.
[App name][Illustration/Icon]
Название object в котором описываются Drawable-ресурсы
Примеры:
KnowledgeBaseIconKnowledgeBaseIllustration
[What i show]_[size_dp]
Drawable-ресурс, который используется повсеместно в приложении[Feature]icon/shape/image/selector[What i show][size_dp]
Drawable-ресурс, который используется только в рамках какого-то функционала
Примеры:
DeleteSettings_32KnowledgeBaseLogo
activity_[what i do]
fragment_[what i do]
dialog_[what i do]
layout_[what i do]
item_[what i do]
view_[what i do]
Примеры:
activity_mainfragment_input_pin_codedialog_account_filterlayout_placeholderitem_userview_shimmer
[What i do]Screen
[What i do]BottomSheet
[What i do]Layout
[What i do]Item
[What i do]Shimmer
Локальные и общие визуальные компоненты обычно именуются только по назначению, но в случае необходимости дополнить
контекст или выделить их тип можно дополнить название припиской View.
[What i do]View
Примеры:
MainScreenInfoBottomSheetDetailsInfoLayoutUserItemAmountShimmerWebView
В параметр
[view type]не нужно включать суффикс_viewчтобы не захламлять название.[what i contain]_container
Любой контейнер[view type]_[what i do]
View используемая повсеместно в приложении[feature]_[view type]_[what i do]
View используемая только в рамках какого-то функционала
Примеры:
view_pin_codebutton_nextusers_containeraccounts_containerauth_button_loginorders_text_screen_headeruser_profile_image_avatar
bottom_menu
Единственное на все приложение меню для "нижней" навигации[why i need]_menu
Меню, которое используется по всему приложению[feature]_[why i need]_menu
Меню, которое используется только в каком-то конкретном функционале[screen]_[why i need]_menu
Меню, которое используется только на конкретном экране
Примеры:
role_type_menuorders_filter_menuchat_toolbar_menuprofile_settings_user_role_menu
В параметр
[menu file name]не нужно включать суффикс_menuчтобы не захламлять название.[menu file name]_[what i show]
Примеры:
role_type_adminorders_filter_by_namechat_toolbar_call
[why i need]
[what i contain]_[array type]_array
Массив элементов, который используется по всему приложению[feature]_[what i contain]_[array type]_array
Массив элементов, который используется в каком-то конкретном функционале
Примеры:
months_string_arrayrole_ids_string_arrayrole_ids_int_arrayorders_delivery_variant_string_array
[view type]_[dimen type]_[dimen size]
Размер который используется по всему приложению[feature]_[view type]_[dimen type]_[dimen size]
Размер, который используется только в каком-то конкретном функционале[screen]_[view type]_[dimen type]_[dimen size]
Размер, который используется только на каком-то конкретном экране
[dimen type]может содержать как общий тип вродеmarginилиpadding, так и более уточнённыйmargin_top. Можно использовать суффиксы_verticalи_horizontalдля описания сразу двух отступов.
Примеры:
button_margin_8dpauth_button_margin_12dporder_info_picture_height_20dp
[what i show]_[string type]
Строка, которая используется по всему приложению[feature]_[what i show/where i am]_[string type]
Строка, которая используется в каком-то конкретном функционале[screen]_[what i show/where i am]_[string type]
Строка, которая используется на каком-то конкретном экране
[string type] может принимать следующие значения:
- title - метки, заголовки кнопок и полей
- description - любые поясняющие тексты
- hint - подсказки для текстовых полей и потенциально для интерфейсных подсказок
- message - сообщения пользователю
- error - сообщения об ошибках
- mask - маски ввода
- [custom] - любые типы, которые требуют отдельного уточнения. Например url, secret и т.п.
Примеры:
app_name_titleorders_filter_button_titlelogin_password_hint
Theme.[app name].[theme name]
ТемаThemeOverlay.[app name].[theme overlay name]
Тема, которая определяет только некоторые атрибуты и применяется поверх активной темыWidget.[app name].[widget name].[style name]
Стиль виджетаTextAppearance.[app name].[text appearance name]
Стиль текстаShapeAppearance.[app name].[shape appearance name]
Стиль фигур
Примеры:
Theme.Openbank.TranslucentStatusThemeOverlay.Openbank.DialogWidget.Openbank.Button.OutlinedTextAppearance.Openbank.Body1ShapeAppearance.Openbank.Small
[why i need]
Примеры:
network_security_config.xml
[designer's font name]
Стандартное имя шрифта или имя придуманное дизайнерами
Q: Я художник! Мне не хочется думать когда я называю ресурсы, это так обязательно?
A: Это регулируется внутренними договоренностями в команде проекта.
Если команда берет на себя ответственность за хаос и за повышение порога входа для новых сотрудников, то называть ресурсы можно как угодно.
Q: Почему в примерах написано именно так, а не иначе?
Я вот думаю нужно писать по-другому!
А: Потому что это просто примеры, они созданы для удобства понимания правил.
Если хочется, можно предложить свои.
Обсудим и заменим.