我有在 Canvas 中绘制的 rectf,基于这个 rectf 我已经绘制了类似的简单气泡。我希望我的文字应该在这个气泡内。
这是我尝试过的。
我有一个用 textSize 30 初始化的 textPaint,我正在构建这样的静态布局。
staticLayout = StaticLayout.Builder.obtain(text, start, end, textPaint, width)
.setAlignment(Layout.Alignment.ALIGN_NORMAL)
.setTextDirection(TextDirectionHeuristics.LTR)
.setLineSpacing(0, 1.0f)
.setIncludePad(false)
.setEllipsizedWidth(10)
.setEllipsize(TextUtils.TruncateAt.START)
.setMaxLines(Integer.MAX_VALUE)
.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)
.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE)
.setJustificationMode(Layout.JUSTIFICATION_MODE_NONE)
.build()
从这个静态布局中,我将 TextLayout 的高度设为 staticLayout.height
我希望我的文本布局高度不应超过我的边界高度的 70%,这样我的文本将始终在我的边界内。float maxTextLayoutHeight = bounds.height() * 0.70f;
还有我实际静态布局的高度height = staticLayout.height;
从这两个值中,我重新计算文本大小并使用以下代码将其应用于我的文本绘制。annotationTextSize = (maxTextLayoutHeight / height) * 13;
annotationTextSize = annotationTextSize * 0.80f;
if (annotationTextSize < 25) annotationTextSize = 25; //Limited to min 25
if (annotationTextSize > 99) annotationTextSize = 99; //Limited to max 99
textPaint.setTextSize(annotationTextSize);
这是一些图片小文本:
文本大小看起来很完美:
文本大小看起来更大:
任何改进的计算都会有很大帮助。
最佳答案
我使用以下方法计算了要呈现的文本的高度。可能会有所帮助
private fun getMultilineTextHeight(text: CharSequence, textPaint: TextPaint, width: Int): Int {
val alignment = Layout.Alignment.ALIGN_NORMAL
val spacingMultiplier = 1f
val spacingAddition = 0f
val includePadding = false
val staticLayout =
StaticLayout(text, textPaint, width, alignment, spacingMultiplier, spacingAddition, includePadding)
return staticLayout.height
}
关于android - 动态计算文本大小以填充矩形空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65034023/