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 资源字符串中将其写为 &#8203;。把它放在冒号和数字之间。

如果它在 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