.cursor/skills/android-dimens/SKILL.md
Guide using dimension resources for UI sizes, spacings, and paddings in Android Compose. Use when creating or modifying UI components, replacing hardcoded dp values, or ensuring consistency across Compose screens.
npx skillsauth add easydev991/Jetpack-WorkoutApp android-dimensInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
*.dp на dimension resourcesimport androidx.compose.ui.res.dimensionResource
import com.swparks.R
All paddings, sizes, spacings, and dimensions must come from app/src/main/res/values/dimens.xml.
❌ Bad:
Modifier.padding(16.dp)
Modifier.size(32.dp)
Arrangement.spacedBy(8.dp)
✅ Good:
Modifier.padding(horizontal = dimensionResource(id = R.dimen.spacing_regular))
Modifier.size(dimensionResource(id = R.dimen.icon_size_small))
Arrangement.spacedBy(dimensionResource(id = R.dimen.spacing_xsmall))
Используй существующие spacing токены из dimens.xml:
// Примеры существующих spacings:
dimensionResource(id = R.dimen.spacing_xxsmall) // 4dp
dimensionResource(id = R.dimen.spacing_regular) // 16dp - standard spacing (most common)
dimensionResource(id = R.dimen.spacing_large) // 24dp - large spacing
Используй существующие icon size токены из dimens.xml:
// Примеры существующих icon sizes:
dimensionResource(id = R.dimen.icon_size_small) // 32dp
dimensionResource(id = R.dimen.icon_size_medium) // 42dp
dimensionResource(id = R.dimen.icon_size_large) // 48dp
Используй существующие common size токены из dimens.xml:
// Примеры существующих common sizes:
dimensionResource(id = R.dimen.size_small) // 32dp
dimensionResource(id = R.dimen.size_medium) // 48dp
dimensionResource(id = R.dimen.size_large) // 80dp
Используй существующие border и elevation токены из dimens.xml:
// Примеры существующих значений:
dimensionResource(id = R.dimen.border_width_small) // 2dp
dimensionResource(id = R.dimen.elevation_none) // 0dp
dimensionResource(id = R.dimen.elevation_small) // 2dp
dimensionResource(id = R.dimen.elevation_medium) // 4dp
Используй существующие corner radius токены из dimens.xml:
// Примеры существующих corner radii:
dimensionResource(id = R.dimen.corner_radius_none) // 0dp
dimensionResource(id = R.dimen.corner_radius_small) // 8dp
dimensionResource(id = R.dimen.corner_radius_bubble) // 20dp
Используй существующие component-specific токены из dimens.xml:
// Примеры существующих component-specific значений:
dimensionResource(id = R.dimen.bubble_horizontal_margin) // 40dp
dimensionResource(id = R.dimen.bubble_padding_horizontal) // 18dp
Only add new dimensions when:
Naming and sorting rules:
Пример: если в dimens.xml уже есть spacing_regular = 16dp и spacing_large = 24dp, а нужно добавить значение 20dp:
spacing_medium = 20dp (если есть)spacing_medium = 20dp и разместить по числовому значению между regular и largespacing_regularplus — нелогично, так как 20 находится ровно посередине между 16 и 24Примеры логического именования:
<!-- Проверяем существующие значения в dimens.xml -->
<dimen name="spacing_regular">16dp</dimen>
<!-- Если нужно 20dp - проверяем, есть ли spacing_medium -->
<dimen name="spacing_medium">20dp</dimen> ← используем или создаем по числовому значению
<dimen name="spacing_large">24dp</dimen>
Naming conventions:
spacing_<semantic> (например: spacing_regular, spacing_medium, spacing_micro)icon_size_<semantic> или icon_<semantic> (например: icon_size_small, icon_size_avatar)corner_radius_<semantic> (например: corner_radius_small, corner_radius_bubble)<component>_<property> (например: bubble_horizontal_margin)Modifier.padding(...) with hardcoded valuesModifier.size(...) with hardcoded valuesArrangement.spacedBy(...) with hardcoded valuesRoundedCornerShape(...) with hardcoded values*.dp value in Compose UI code (except Preview functions)When replacing hardcoded values:
androidx.compose.ui.res.dimensionResourcecom.swparks.R (if not already present)dimens.xml firstdimensionResource(id = R.dimen.<name>)make format after changes./gradlew buildДля примеров использования смотрите файл references/EXAMPLES.md.
См. пример в references/EXAMPLES.md.
См. пример в references/EXAMPLES.md.
См. пример в references/EXAMPLES.md.
См. пример в references/EXAMPLES.md.
См. пример в references/EXAMPLES.md.
Для полных примеров использования смотрите файл references/EXAMPLES.md:
testing
Пиши тесты в андроид-проекте правильно. Используй этот навык при написании любых типов тестов (unit, integration, UI), тестировании бизнес-логики, сетевых функций и компонентов UI.
tools
Реализуй pull-to-refresh в Jetpack Compose с использованием Material 3 PullToRefreshBox. Используй этот навык при добавлении возможности обновления данных на экранах со списками или карточками.
tools
Правильно работай с локализацией в Android-проекте. Используй этот навык при добавлении новых строковых ресурсов, работе с plurals, форматировании дат и текстов.
tools
Блокировка UI контента экрана во время загрузки данных или выполнения асинхронных операций с отображением индикатора загрузки. Используй этот навык при разработке экранов с сетевыми запросами, операциями CRUD и других асинхронных действий.