ems, contrariamente alle credenze popolari (o almeno dalla maggior parte dei thread su ems qui), non si basa sulla larghezza di una singola "M".
Originariamente era così nella tipografia, ma nel supporto digitale, incluso Android, il suo significato è stato spostato alla dimensione del carattere tipografico utilizzato, o in altre parole, alla sua altezza (escludendo qualsiasi imbottitura per accenti / segni diacritici).
Quindi ciò significa che quando specifichi il emsper un TextView, lo userà textSizecome base e lo moltiplicherà per il valore emsspecificato.
Ad esempio, se si imposta un TextView 16sp emssu 4, la sua larghezza sarà 64sp. Puoi testarlo facilmente usando due TextView (con includeFontPaddingimpostato su false) affiancati all'interno di un ConstraintLayout (per sfruttarlo layout_constraintDimensionRatio).
sp.