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

Posted

技术标签:

【中文标题】如何为 TextView 设置最小宽度(以字符为单位)?【英文标题】:How can I set a minimum width (in characters) for a TextView? 【发布时间】:2011-03-12 10:47:55 【问题描述】:

我已经在这里很好地搜索了这个,但找不到解决方案。

我在包含整数的 RelativeLayout 中有一个 TextView。 数字将在 1 到 99 之间 - 谁能告诉我如何调整大小 TextView 使其宽度始终为字符串“99”的宽度 即使它只包含“1”?

我需要这个,因为它右侧的组件位置 TextView 取决于它的宽度,所以所有的位置取决于有多少 TextView 包含的数字。

我不介意这是用 XML 还是代码完成的——我只是想避免 以像素为单位设置 TextView 的宽度!

感谢您提供任何可能的解决方案;请问我有没有漏掉 重要信息!

【问题讨论】:

【参考方案1】:

使用TextView的android:maxLength属性。请阅读this

【讨论】:

您好,感谢您的回答,但这是我真正需要的最小长度。 :-)【参考方案2】:

我认为您正在寻找 Paint 类中的 getTextBounds() 方法。 自己没试过。

【讨论】:

【参考方案3】:

试试这个:

android:layout_
android:minEms="2"

【讨论】:

你可能还想添加 android:gravity="center"【参考方案4】:

如果您的字体是等宽字体,Ems 可以工作。对于比例字体,您希望它的宽度为两个 '0',而不是两个 'm'。您可以像这样回退到 TextPaint.measureText:

float measureText = zip.getPaint().measureText("00000");
zip.setWidth(zip.getPaddingLeft() + zip.getPaddingRight() + (int) measureText);

【讨论】:

像魔术一样工作!非常感谢分享此代码 sn-p。 :) 设置 em 对我不起作用,但确实如此。谢谢 pforhan :)【参考方案5】:

最好的方法是使用TextPaint。这是一个简单的例子:

TextPaint textPaint = new TextPaint();
textPaint.setTextSize(yourTextView.getTextSize());
yourTextView.setMinWidth((int) textPaint.measureText("-88.88"));

不要忘记在 TextPaint 对象中指定文本大小 在measureText 中输入您希望看到的最长字符串(我写了“-88.88”,假设我的文本可以处理 100 以下的正数或负数,逗号后有 2 位数字)

【讨论】:

【参考方案6】:

简单的解决方案,将 textview 的字体设置为 Monospace。

android:typeface="monospace"

【讨论】:

以上是关于如何为 TextView 设置最小宽度(以字符为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QFormLayout 的第一列设置最小宽度?

如何为android recyclerview中的最大字符串设置textview高度?

如何为css中的文本设置特定的像素或字符宽度限制

如何为单独的 TextView 设置单独的进度条

Android_TextView属性XML详解

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