在Android中,带跨度的StaticLayout可以对齐居中吗?

euoag5mw  于 2022-11-03  发布在  Android
关注(0)|答案(1)|浏览(144)

我正在尝试使用StaticLayoutCharSequenceSpan居中。当textPaint.textAlign = Paint.Align.LEFT时,一切都正常。

但是,如果我设置textPaint.textAlign = Paint.Align.CENTER,一切都会变得不稳定。

它看起来像是跨接的部分被剥离,然后“居中计算”完成,然后文本被呈现。
在我的代码中,通过doCenter更改对齐方式。

override fun onDraw(canvas: Canvas) {
        //:

        val doCenter = true
        val textWidPct = 0.90F
        dpToUse = 10
        val cs = clueDisplayText

        val xPos: Float
        if (doCenter) {
            xPos = clueTextRect.exactCenterX()
            textPaint.textAlign = Paint.Align.CENTER
        } else {
            xPos = clueTextRect.width() * ((1 - textWidPct) / 2)
            textPaint.textAlign = Paint.Align.LEFT
        }
        textPaint.typeface = k.typefaceNormal
        textPaint.textSize = j.dpToPx(dpToUse).toFloat()
        textPaint.color = cc.Black

        val wid = (width * textWidPct).round()
        val staticLayout = StaticLayout.Builder
            .obtain(cs, 0, cs.length, textPaint, wid)
            .build()

        val yPos = clueTextY + j.dpToPx(dpToUse)
        canvas.withTranslation(xPos, yPos) {
            staticLayout.draw(canvas)
        }
    }

最后一点:
不断变化

canvas.withTranslation(xPos, yPos) {
                staticLayout.draw(canvas)
            }

来简单地

staticLayout.draw(canvas)

将输出移到左上角,但它也不稳定。
我研究过这个问题,但没有找到任何相关的东西。在SO网站上没有,在网络上也没有。我确实发现了一些关于CSS的同类问题的文章,结论似乎是“无法完成”。
我是不是错过了一些简单的东西?或者我需要采取一种更复杂的方法?或者这是不可能的?
注意:minSdk为23(M /棉花糖)

rkkpypqq

rkkpypqq1#

我想通了我的错误。决定为任何可能遇到这个问题的人发帖。
不使用

textPaint.textAlign = Paint.Align.CENTER

StaticLayout.Builder中设置对齐

val staticLayout = StaticLayout.Builder
        .obtain(cs, 0, cs.length, textPaint, wid)
        .setAlignment(Layout.Alignment.ALIGN_CENTER)
        .build()

相关问题