根据字符设置 TextView 的宽度
Posted
技术标签:
【中文标题】根据字符设置 TextView 的宽度【英文标题】:Set width of TextView in terms of characters 【发布时间】:2011-09-03 23:23:34 【问题描述】:真的在寻找answer to this。
想要根据数字或字符设置 TextView 的宽度。因此,如果我希望它始终为 3 个字符宽,我可以设置它,它会根据 textSize 设置进行调整。没有这个,我必须将宽度设置为 50dip 或其他东西,这可能是正确的,也可能不是正确的,具体取决于字体大小。
【问题讨论】:
有可能通过在sp
中指定您的维度来做到这一点。
@CommonsWare,是的,如果你能告诉我有多少 SP 等于一个字符可能有效(但请参阅下面使用 minEms 的答案,因为我认为这就是我想要的)。所以如果文本大小=30sp 并且我想要 3 个字符宽,我是否将宽度设置为 90sp?我想我可以试试。
是的,minEms
可能是一个更好的答案。
【参考方案1】:
大多数字体不会将所有字符宽度设置为相同。 Courier 可能是最常用的例外,但通常看一下 i 和 A 之间的区别,例如。这让你要求做的事情有点问题。
【讨论】:
对,所以我希望这个问题已经解决了。因此,根据字符设置宽度,然后在显示时找出该字段的字体特征,并根据它确定它应该有多大。所以真的问这个问题是否已经解决了,以一种非常简单的方式。听起来不像。【参考方案2】:尝试使用:android:maxLength="3"
这会将您的文本限制为特定数量的字符。
【讨论】:
【参考方案3】:回答我自己的问题...
赢家是:设置minEms
属性(android:minEms
)!!!
所以“ems”原来是指最宽字符的大小,通常是“M”,明白吗?因此,在 EditText 或 TextView 上将 minEms 设置为整数值(例如 3)应确保其宽度至少为 3 个字符。您也可以设置 maxEms。
所以凯尔在这个线程上的回答虽然是错误的,但让我找到了答案,所以谢谢凯尔。
【讨论】:
当然,我还在测试这是否真的有效,但目前看来是这样。 另请注意,layout_width
必须是 wrap_content
才能使 minEms 和 maxEms 按预期工作,正如 this answer 指出的那样。【参考方案4】:
ems
,与流行的看法相反(或者至少来自这里关于 ems 的大多数线程),不是基于单个“M”的宽度。
最初就像在排版中那样,但在包括 Android 在内的数字媒体中,它的含义被转移到所使用的字体的大小,或者换句话说,它的高度(不包括任何重音/变音符号的填充)。
这意味着当您为 TextView 指定 ems
时,它将使用其 textSize
作为基数并将其乘以指定的 ems
。
作为示例,如果您将 16sp TextView 的 ems
设置为 4,则其宽度将为 64sp 宽。您可以通过在 ConstraintLayout 中并排使用两个 TextView(includeFontPadding
设置为 false)轻松对其进行测试(以利用其 layout_constraintDimensionRatio
)。
【讨论】:
以上是关于根据字符设置 TextView 的宽度的主要内容,如果未能解决你的问题,请参考以下文章