ems, contrairement aux croyances populaires (ou du moins de la plupart des discussions sur les ems ici), n'est pas basée sur la largeur d'un seul «M».
C'était à l'origine comme ça en typographie, mais sur support numérique, y compris Android, sa signification a été décalée vers la taille de la police utilisée, ou en d'autres termes, sa hauteur (à l'exclusion de tout rembourrage pour les accents / signes diacritiques).
Cela signifie que lorsque vous spécifiez le emspour un TextView, il l'utilisera textSizecomme base et le multipliera par le emsspécifié.
À titre d'exemple, si vous définissez un TextView 16sp emssur 4, sa largeur sera de 64sp. Vous pouvez facilement le tester en utilisant deux TextView (avec includeFontPaddingla valeur false) côte à côte dans un ConstraintLayout (pour en tirer parti layout_constraintDimensionRatio).
sp.