根据字符设置 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 的宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何为 TextView 设置最小宽度(以字符为单位)?

android 计算textview一行显示多少字

Android_TextView属性XML详解

根据内容大小属性设置 UIText 视图的宽度

请问在Android中Textview换行显示问题,您如何解决?

TextView系列:给定宽度,根据内容长度,自动改变字体大小