ems, вопреки распространенному мнению (или, по крайней мере, из большинства веток об ems здесь), не основывается на ширине одной буквы «М».
Изначально это было так в типографике, но в цифровых носителях, включая Android, его значение было смещено до размера используемого шрифта или, другими словами, его высоты (за исключением любых отступов для акцентов / диакритических знаков).
Это означает, что когда вы указываете emsдля TextView, он будет использовать его textSizeв качестве основы и умножать на emsуказанное.
Например, если вы установите TextView emsдля 16sp равным 4, его ширина будет равна 64sp. Вы можете легко протестировать его, используя два TextView (со includeFontPaddingзначением false) бок о бок внутри ConstraintLayout (чтобы использовать его layout_constraintDimensionRatio).
sp.