# Propuesta definición y uso de Dimens
###### tags: `foro`
## Dimens
Todas las dimensiones usadas para implementar los diseños de vista deben estar definidas en recursos de tipo `dimen`
### DPs
- Las dimensiones comunes (en **KBP**, módulo `common`; en proyectos **legacy**, region `COMMON`) deberán estar especificadas como se muestra a continuación. Mediante consenso, los equipos deben valorar la inclusión de nuevas dimensiones comunes en el proyecto.
- Plantilla:
```xml
<dimen name="common__view_name__view_measure">48dp</dimen>
```
- Ejemplo:
```xml
<dimen name="common__btn__height">48dp</dimen>
```
- Cada vista de una funcionalidad (en **KBP**, cualquier módulo de `feature`; en proyectos **legacy**, region de la `SCREEN` correspondiente) tendrá especificadas sus propias dimensiones de la siguiente manera:
- Si es una dimensión común, referenciar a la dimensión del módulo `common`:
```xml
<dimen name="login_fragment__btn__register__height">@dimen/common__btn__height</dimen>
```
- Si es una dimensión propia, específicarla en su archivo de dimensiones:
```xml
<dimen name="login_fragment__btn__init__height">64dp</dimen>
```
- Plantilla:
```xml
<dimen name="screen_context__view_type__view_name__view_measure">64dp</dimen>
```
- Ejemplo:
```xml
<dimen name="login_fragment__btn__init__height">64dp</dimen>
<dimen name="login_fragment__input__user__height">48dp</dimen>
```
- Además, si se identifican dimensiones comúnes propias de la funcionalidad (en **KBP**, cualquier módulo de `feature`; en proyectos **legacy**, region de la `FEATURE`), definirlas de la siguiente manera:
- Plantilla:
```xml
<dimen name="feature_context__view_name__view_measure">64dp</dimen>
```
- Ejemplo:
```xml
<dimen name="login_feature__btn__height">64dp</dimen>
```
- Excepcionalmente, las dimensiones en selectores, drawables y similares serán definidos explícitamente salvo haber comprobado in situ el buen funcionamiento de usar referencias.
### SPs
- Para las dimensiones comunes (en **KBP**, módulo `common`) se definen por tipo de texto (deberían estar espeficicadas por equipo **UX/UI** en una Guía de estilo)
- No se permitirán sufijos de tipo `small`, `high`, `big`, `ultimate`, etc. Deberán de ser lo suficientemente descriptivos.
```xml
<!-- Common defined by UX/UI or Google Material Design-->
<dimen name="common__font__h1">96sp</dimen>
<dimen name="common__font__h2">60sp</dimen>
<dimen name="common__font__h3">48sp</dimen>
<dimen name="common__font__h4">34sp</dimen>
<dimen name="common__font__h5">24sp</dimen>
<dimen name="common__font__h6">20sp</dimen>
<dimen name="common__font__subtitle1">16sp</dimen>
<dimen name="common__font__subtitle2">14sp</dimen>
<dimen name="common__font__body1">16sp</dimen>
<dimen name="common__font__body2">14sp</dimen>
<dimen name="common__font__button">14sp</dimen>
<dimen name="common__font__caption">12sp</dimen>
<dimen name="common__font__overline">10sp</dimen>
<!-- New common defined -->
<dimen name="common__font__header__suffix_descriptive">40sp</dimen>
<dimen name="common__font__subtitle__suffix_descriptive">20sp</dimen>
<!-- Opcionalmente comentar ciertas dimensiones de fuentes para casos muy específicos-->
<dimen name="common__font__header__map_toolbar">36sp</dimen>
```
- Cada vista tendrá especificadas sus propias dimensiones de la siguiente manera
- Si es una dimensión común, referenciar a la dimensión del módulo `common`
```xml
<dimen name="login__label__title">@dimen/common__font__h5</dimen>
```
- Si es una dimensión propia, específicarla en su archivo de dimensiones
```xml
<dimen name="login__label__user_input">12sp</dimen>
```
- Si considera conveniente por parte del equipo, definir dimensiones comunes dentro de una funcionalidad
- Plantilla:
```xml
<dimen name="feature_context__font__view_name__view_measure">64dp</dimen>
```
- Ejemplo:
```xml
<dimen name="login_feature__font__title">64dp</dimen>
```