删除文本第一个字母之前的多余空格,以便它可以正确对齐到左侧
Posted
技术标签:
【中文标题】删除文本第一个字母之前的多余空格,以便它可以正确对齐到左侧【英文标题】:Remove extra space before first letter of text so it can be properly aligned to the left 【发布时间】:2012-10-19 00:34:10 【问题描述】:我有几个完全相同的TextView
s 垂直对齐(左边距相同,左边距相同,左边位置相同)。它们可以有不同的文本大小,并且文本可以以不同的字母开头。问题是,虽然TextView
s 是左对齐的,但其中的文本却不是。有可能实现这一目标吗?删除/分解每个第一个字母之前的额外空间?还是我应该寻找一些特定的字体?
下面的图片显示了这种情况。有三个TextView
s 与左边对齐,但每个字母的开始点不同。 s 和 m 大小相同,但未对齐。 i 比较小,差距要大很多。
我所看到的:
我想要什么:
示例代码:
<RelativeLayout
android:layout_
android:layout_ >
<TextView
android:layout_
android:layout_
android:text="m"
android:textColor="#88FF0000"
android:textSize="250dp" />
<TextView
android:layout_
android:layout_
android:text="s"
android:textColor="#8800FF00"
android:textSize="250dp" />
<TextView
android:layout_
android:layout_
android:layout_marginTop="220dp"
android:text="i"
android:textColor="#880000FF"
android:textSize="25dp" />
</RelativeLayout>
【问题讨论】:
我认为这对于 TextView 是不可能的。您可能可以使用来自Paint.getTextWidths()
的信息自己使用画布并绘制文本,但我不知道从中返回的宽度是否包括周围的空白(我猜它赢了'没有帮助)。
我相信 TextView 是可能的,它只需要一个 MonoSpaced 字体。
我试过 android:typeface="monospace"
并没有帮助。
【参考方案1】:
虽然这个问题很老,但我只是遇到了同样的问题并找到了如下解决方案,也许它可以帮助其他人:
创建一个TextView子类并覆盖它的onDraw()
方法如下:
// bounds field to avoid allocations in onDraw()
Rect bounds = new Rect();
@Override
protected void onDraw(Canvas canvas)
getPaint().getTextBounds(getText().toString(), 0, getText().length(), bounds);
canvas.translate(-bounds.left, 0);
super.onDraw(canvas);
警告:尽管我观察到文本边界的左值对应于第一个字母之前的空像素数量,并且符合Paint#getTextBounds()
的文档,其中指出它返回
包围所有字符的最小矩形,隐含原点位于 (0,0),
因此,左边的值是实际文本开始的位置,此修复可能不适用于所有字体或配置。
还需要注意的是,这是左对齐单行文本的简单解决方案;多行或滚动文本需要进一步调整,否则可能根本无法使用。
【讨论】:
感谢提交。将在第一时间检查您的解决方案并更新答案的状态。以上是关于删除文本第一个字母之前的多余空格,以便它可以正确对齐到左侧的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 保存时自动删除空格 自动去掉语句后面多余的空格?
请教一个批量删除文本文件中多余回车或提取文本中前两行数据的shell脚本,请高手指点,万分感谢