ems, contrariamente a las creencias populares (o al menos de la mayoría de los hilos sobre ems aquí), no se basa en el ancho de una sola 'M'.
Originalmente era así en tipografía, pero en el medio digital, incluido Android, su significado se cambió al tamaño del tipo de letra utilizado, o en otras palabras, a su altura (excluyendo cualquier relleno para acentos / signos diacríticos).
Eso significa que cuando especificas emspara un TextView, lo usará textSizecomo base y lo multiplicará por el emsespecificado.
Como ejemplo, si establece un TextView de 16sp emsen 4, su ancho será de 64sp. Puede probarlo fácilmente utilizando dos TextView (con includeFontPaddingestablecido en falso) uno al lado del otro dentro de un ConstraintLayout (para aprovechar su layout_constraintDimensionRatio).
sp.