ems, wbrew powszechnym przekonaniom (a przynajmniej z większości wątków o emach tutaj), nie opiera się na szerokości pojedynczego „M”.
Pierwotnie tak było w typografii, ale w nośniku cyfrowym, w tym na Androidzie, jego znaczenie zostało przesunięte do rozmiaru użytego kroju pisma, czyli innymi słowy, jego wysokości (z wyłączeniem wszelkich dopełnień dla akcentów / znaków diakrytycznych).
Oznacza to, że kiedy określisz emsdla TextView, użyje go textSizejako podstawy i pomnoży go przez emsokreślony.
Na przykład, jeśli ustawisz 16sp TextView emsna 4, jego szerokość będzie wynosić 64 sp. Możesz go łatwo przetestować, używając dwóch TextView (z includeFontPaddingustawieniem na false) obok siebie w ConstraintLayout (aby wykorzystać jego layout_constraintDimensionRatio).
sp.