Android 中的不间断冒号
Nonbreaking colon in Android
我有以下一行文字:address:345346943693495349534963
我希望这条线总是这样断(确切的断点并不重要,但它不应该是冒号):
address:3453469436934
95349534963
在我的 Android 4.2.2 设备上,它如上所示中断,但在 Android 6.0 模拟器上,它的行为不同:
address:
345346943693495349534963
如何使中断行为在所有设备上保持一致?
当我在 canvas 上绘制文本时得到不同的结果,这是代码(在 Scala 中):
def paint = {
val newPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG)
newPaint setTextSize getResources.getDimensionPixelSize(R.dimen.text_size)
newPaint setTypeface Typeface.create("Droid Sans", Typeface.NORMAL)
newPaint setTextAlign Paint.Align.CENTER
newPaint setStyle Paint.Style.FILL
newPaint setColor Color.BLACK
newPaint
}
def drawText(canvas: Canvas, text: String, x: Float, baseY: Float) = {
val layout = new StaticLayout(text, paint, textBounds, ALIGN_NORMAL, 1.0f, 0.0f, false)
val y = baseY - layout.getHeight / 2f
canvas.save
canvas.translate(x, y)
layout draw canvas
canvas.restore
}
drawText(canvas, gText, bitmap.getWidth / 2, topSize / 2)
您可以使用 soft hypens (\u00AD),您必须将其放置在数字字符串中的多个位置:
address:3\u00AD453469\u00AD4369\u00AD349534953\u00AD4963
不幸的是,这将呈现连字符,我不知道这是否适合您:
address:3453469436934-
95349534963
这也适用于 TextViews 的 android:text
属性。
P.S:
我也考虑过这样使用 Html:
Html.fromHtml("<span style="display: inline-block;">address:3</span>45346943693495349534963");
但不幸的是我无法在 Android
中使用它
您似乎在寻找 Word Joiner unicode 代码点
https://en.wikipedia.org/wiki/Word_joiner
它也被称为零宽度不间断 space (ZWNBSP)。
根据另一个问题:
Zero-width line breaking space for Android
自版本 5 (Lollipop) 起,Android 应该支持它。软宣传也是如此(在 PhilLab 回复中建议)。
我建议您尝试一下,您可以在 XML 资源字符串中将其写为 ​
。把它放在冒号和数字之间。
如果它在 Lollipop 之前不起作用,并且您需要支持以前的平台,那么我唯一能想到的就是逐个字符地测量文本,并了解视图的可用宽度(您必须单独计算),在要拆分的文本中手动添加一个新行。
您可以通过阅读这篇文章了解文本测量在 Android 中的工作原理:
https://chris.banes.me/2014/03/27/measuring-text/
也许也有使用 Spans 的方法,但我不知道。
before draw a text on canvas follow following step and
String temp = "address:345346943693495349534963";
String firstString=temp.substring(0, 21);
[![enter image description here][1]][1]String secondString = temp.substring(20);
String finalString = firstString+"\n"+secondString;
now finally draw a text on canvas with "finalString",and if set text in textview then set final string in textview.
TextView yourTextView = (TextView) findViewById(R.id.txt1);
yourTextView.setText(finalString);
[1]: http://i.stack.imgur.com/godJJ.png
我有以下一行文字:address:345346943693495349534963
我希望这条线总是这样断(确切的断点并不重要,但它不应该是冒号):
address:3453469436934
95349534963
在我的 Android 4.2.2 设备上,它如上所示中断,但在 Android 6.0 模拟器上,它的行为不同:
address:
345346943693495349534963
如何使中断行为在所有设备上保持一致?
当我在 canvas 上绘制文本时得到不同的结果,这是代码(在 Scala 中):
def paint = {
val newPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG)
newPaint setTextSize getResources.getDimensionPixelSize(R.dimen.text_size)
newPaint setTypeface Typeface.create("Droid Sans", Typeface.NORMAL)
newPaint setTextAlign Paint.Align.CENTER
newPaint setStyle Paint.Style.FILL
newPaint setColor Color.BLACK
newPaint
}
def drawText(canvas: Canvas, text: String, x: Float, baseY: Float) = {
val layout = new StaticLayout(text, paint, textBounds, ALIGN_NORMAL, 1.0f, 0.0f, false)
val y = baseY - layout.getHeight / 2f
canvas.save
canvas.translate(x, y)
layout draw canvas
canvas.restore
}
drawText(canvas, gText, bitmap.getWidth / 2, topSize / 2)
您可以使用 soft hypens (\u00AD),您必须将其放置在数字字符串中的多个位置:
address:3\u00AD453469\u00AD4369\u00AD349534953\u00AD4963
不幸的是,这将呈现连字符,我不知道这是否适合您:
address:3453469436934-
95349534963
这也适用于 TextViews 的 android:text
属性。
P.S: 我也考虑过这样使用 Html:
Html.fromHtml("<span style="display: inline-block;">address:3</span>45346943693495349534963");
但不幸的是我无法在 Android
中使用它您似乎在寻找 Word Joiner unicode 代码点 https://en.wikipedia.org/wiki/Word_joiner
它也被称为零宽度不间断 space (ZWNBSP)。
根据另一个问题: Zero-width line breaking space for Android
自版本 5 (Lollipop) 起,Android 应该支持它。软宣传也是如此(在 PhilLab 回复中建议)。
我建议您尝试一下,您可以在 XML 资源字符串中将其写为 ​
。把它放在冒号和数字之间。
如果它在 Lollipop 之前不起作用,并且您需要支持以前的平台,那么我唯一能想到的就是逐个字符地测量文本,并了解视图的可用宽度(您必须单独计算),在要拆分的文本中手动添加一个新行。
您可以通过阅读这篇文章了解文本测量在 Android 中的工作原理: https://chris.banes.me/2014/03/27/measuring-text/
也许也有使用 Spans 的方法,但我不知道。
before draw a text on canvas follow following step and
String temp = "address:345346943693495349534963";
String firstString=temp.substring(0, 21);
[![enter image description here][1]][1]String secondString = temp.substring(20);
String finalString = firstString+"\n"+secondString;
now finally draw a text on canvas with "finalString",and if set text in textview then set final string in textview.
TextView yourTextView = (TextView) findViewById(R.id.txt1);
yourTextView.setText(finalString);
[1]: http://i.stack.imgur.com/godJJ.png