我正在尝试使用StaticLayout
将CharSequence
与Span
居中。当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 /棉花糖)
1条答案
按热度按时间rkkpypqq1#
我想通了我的错误。决定为任何可能遇到这个问题的人发帖。
不使用
在
StaticLayout.Builder
中设置对齐