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

38

我在这里进行了很好的搜索,但找不到解决方案。

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

我需要这样做是因为位于此TextView右侧的组件的位置取决于其宽度,因此所有组件的位置都取决于TextView包含的数字 的位数。

我不介意使用XML或代码来实现这一点-我只想避免以像素为单位设置TextView的宽度!

感谢任何可能的解决方案;如果我漏掉了任何重要信息,请问我!

5个回答

79

试试这个:

android:layout_width="wrap_content"
android:minEms="2"

5
你可能还想添加 android:gravity="center" 。 - Shyri
1
它不能正常工作,宽度仍然很大,基本上5个ems等于10个字符。 - user924

24

如果您的字体是等宽字体,那么Ems将有效。对于比例字体,您需要将其宽度设置为两个'0'的宽度,而不是两个'm'的宽度。您可以像这样回退到TextPaint.measureText:

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

太神奇了!非常感谢分享这段代码片段。 :) - Annie Lagang
1
设置ems对我没有起作用,但这个方法可以。谢谢pforhan :) - Jay

5

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

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

不要忘记在 TextPaint 对象中指定文本大小
measureText 中输入您期望看到的最长字符串(我已写入“-88.88”,假设我的文本可以处理小数点后两位的正数或负数,且值小于100)


0
我认为你正在寻找Paint类中的getTextBounds()方法。虽然我自己没有尝试过。

-1

简单的解决方案,将您的TextView的字体设置为等宽字体。

android:typeface="monospace"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接