以字符为单位设置TextView的宽度


88

真的在寻找答案

想要基于数字或字符设置TextView的宽度。因此,如果我希望它始终为3个字符宽,则可以对其进行设置,并将根据textSize设置进行调整。没有这个,我必须将宽度设置为50dip左右,这可能取决于字体大小,也可能不合适。


可以通过在中指定尺寸来实现此目的sp
CommonsWare

@CommonsWare,是的,如果您能告诉我,多少个SP等于一个字符可能有效(但我想在下面用minEms看到我的答案)。因此,如果文本大小为30sp,并且我希望宽度为3个字符,是否将宽度设置为90sp?我想我可以试试看。
Fraggle等

2
是的,minEms可能是一个更好的答案。
CommonsWare,

Answers:


177

回答我自己的问题...

获胜者是:设置minEms属性(android:minEms)!!!

那么“ ems ”是指最宽字符的大小,通常是“ M”,懂吗?因此,在EditText或TextView上将minEms设置为整数值(例如3)应确保其宽度至少为3个字符。您也可以设置maxEms。

因此,Kyle在该线程上的答案虽然错了,但却让我找到了答案,所以谢谢Kyle。


3
当然,我仍在测试以查看是否确实有效,但到目前为止看起来还不错。
Fraggle等

8
还要注意,正如这个答案所指出的,layout_width需要使wrap_contentminEms和maxEms正常工作。
约尼克

0

大多数字体不会将所有字符宽度都设置为相同。Courier也许是最常用的例外,但是通常看一下i与A之间的区别。这使您要求做的事情有点问题。


是的,所以我希望这个问题已经解决。因此,以字符为单位设置宽度,然后在显示时找出该字段的字体特性,并根据该字段确定字体的大小。因此,以一种非常简单的方式真正询问此问题是否已解决。听起来好像不是。
Fraggle等

0

尝试使用: android:maxLength="3"

这会将您的文本限制为特定数量的字符。


0

ems与流行的看法相反(或至少从这里大多数关于ems的观点出发),并非基于单个“ M”的宽度。

它最初与印刷术类似,但在包括Android在内的数字媒体中,其含义已转变为所用字体的大小,或者换句话说,其高度(不包括重音符号和变音符号的空白)。

因此,这意味着当您ems为TextView指定时,它将以其textSize为基础并将其乘以ems指定的值。

作为示例,如果将16sp TextView的值设置ems为4,则其宽度将为64sp。您可以includeFontPadding在ConstraintLayout内部并排使用两个TextView(设置为false)来轻松对其进行测试(以利用layout_constraintDimensionRatio)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.