Ems是什么意思?(Android TextView)

Ems是什么意思(与TextView相关)?例如在

android:ems     setEms(int)

使TextView恰好是这么多ems宽。

291042 次浏览

Ems是一个排版术语,它控制文本大小等。检查在这里

在给定英文字体大小下字母M的宽度 所以2em是给定字体中字母M宽度的两倍
对于非英文字体,它是该字体中最宽字母的宽度。此宽度大小(以像素为单位)与英文字体但它仍然是1em中M的宽度大小(以像素为单位)不同 所以如果我使用英文字体的12sp文本,1em相对于这个12sp英文字体;使用12sp的意大利字体给出的1em比英文字体的像素宽度不同

android:emssetEms(n)设置TextView的宽度以适应n 'M'字母的文本,而不管实际的文本扩展名和文本大小。参见wikipedia Em单位

但仅当layout_width设置为"wrap_content"时。其他layout_width值覆盖ems宽度设置。

添加android:textSize属性决定了视图的物理宽度与上面n 'M的文本的textSize *长度相同。

新兴市场是字体宽度的排版单位。16号字体中的一个em就是16个点

em基本上是CSS的字体大小属性。

em和ex单位取决于字体,每个单位可能不同 元素。em仅仅是字体大小。在元素中 对于2英寸的字体,1em意味着2英寸。表示大小,如页边距 填充,在em中表示它们与字体大小有关,而if 用户使用大字体(例如在大屏幕上)或小字体(例如在大屏幕上)。 在手持设备上),大小将成比例。声明 如文本缩进:1.5em和margin: 1em是极其常见的 CSS。< / p >

来源:https://www.w3.org/Style/Examples/007/units

ems是测量的单位

em这个名字最初是M宽度的引用。它将TextView/EditText的宽度设置为适合n 'M'个字母的文本,而不管实际的文本扩展名和文本大小。

例如:

android:ems使EditText恰好是这么多ems宽。

<EditText
android:ems="2"
/>

表示字母M宽度的两倍。

虽然其他答案已经满足了这个问题(毕竟这是一个3年的问题),但我只是要添加一些信息,并可能修复一些误解。

Em,虽然最初是指印刷中单个“M”字符的宽度,但在数字媒体中,它被转换为相对于字体的点大小的单位(font-size或textSize),换句话说,它使用的是文本的高度,而不是单个“M”的宽度。

在Android中,这意味着当你指定一个TextView的ems时,它使用所说的TextView的textSize作为基础,不包括为重音/变音符添加填充。当你将一个16sp的TextView的ems设置为4时,这意味着它的宽度将是64sp宽,因此解释了@stefan关于为什么一个10 ems宽的EditText能够适合17 'M'的评论。

在Android中添加其他答案,Ems的大小,默认情况下,可以在每种语言和输入中有所不同。

这意味着如果您希望为文本字段设置最小宽度(由字符数定义),则必须根据Ems属性的字体和字体大小正确计算Ems并设置它。

对于那些在这方面有困难的人,你可以自己计算提示大小,以避免混淆Ems:

val tf = TextField()
val layout = TextInputLayout()
val hint = "Hint"


val measureText = tf.paint.measureText(hint).toInt()
tf.width = tf.paddingLeft + tf.paddingRight + measureText.toInt()
layout.hint = hint