如何为 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 设置最小宽度(以字符为单位)?的主要内容,如果未能解决你的问题,请参考以下文章