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

发布于 2024-09-09 01:12:59 字数 323 浏览 5 评论 0原文

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

我在relativelayout中有一个textview,其中包含一个整数。 数字范围在 1 到 99 之间 - 谁能告诉我如何确定尺寸 TextView 的宽度始终是字符串“99”的宽度 即使它只包含“1”?

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

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

感谢任何可能的解决方案;请问我是否遗漏了什么 重要信息!

I've had a good search for this on here and can't find a solution.

I have a TextView in a RelativeLayout which contains an integer number.
The number will range between 1 and 99 - can anyone tell me how to size
the TextView so that its width is always the width of the string "99"
even if it only contains "1"?

I need this because the positions of the components to the right of this
TextView depend on its width, so all are position depending on how many
digits the TextView contains.

I don't mind if this is done in XML or code - I just want to avoid having
to set the width of a TextView in pixels!

Thanks for any possible solutions; Please ask if I've missed out any
important info!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

瑾夏年华 2024-09-16 01:12:59

试试这个:

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

try this:

android:layout_width="wrap_content"
android:minEms="2"
听闻余生 2024-09-16 01:12:59

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

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

Ems works if your font is monospace. For proportional fonts, you want it the width of two '0's, not two 'm's. You can fall back to TextPaint.measureText like so:

float measureText = zip.getPaint().measureText("00000");
zip.setWidth(zip.getPaddingLeft() + zip.getPaddingRight() + (int) measureText);
來不及說愛妳 2024-09-16 01:12:59

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

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

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

Best way is to use TextPaint. Here is a simple example:

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

Do not forget to specify text size in your TextPaint object
In measureText enter longest possible string you're expecting to see (I've written "-88.88" assuming my text can handle positive or negative numbers below 100 with 2 digits after comma)

嘿咻 2024-09-16 01:12:59

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

I think you're looking for the getTextBounds() method in the Paint class.
Didn't try it myself tho.

终难遇 2024-09-16 01:12:59

简单的解决方案,将文本视图的字体设置为等宽字体。

android:typeface="monospace"

Simple solution, set typeface of your textview as Monospace.

android:typeface="monospace"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文