android - 动态计算文本大小以填充矩形空间

标签 android canvas

我有在 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);
这是一些图片
小文本:
enter image description here
enter image description here
文本大小看起来很完美:
enter image description here
enter image description here
文本大小看起来更大:
enter image description here
enter image description here
任何改进的计算都会有很大帮助。

最佳答案

我使用以下方法计算了要呈现的文本的高度。可能会有所帮助

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/

相关文章:

android - 如何在android中为线性布局创建如下所示的阴影效果?

javascript - 数组在 node.js 上作为字符串发送

javascript - 无法获取 Canvas 的上下文

java - 如何使用 GUI 在 Canvas 上绘制简单图形

javascript - 仅当设置新帧时才将动画绘制到 Canvas 上?

canvas - 弯曲一个以矩形开始的图像(由用户上传),最好使用 Canvas 或 JS

android - 如果在任何 Activity 中打开键盘,Tabgroupactivity 的 OnBackpressed 将不起作用

java - 在 Android 中选择项目后如何关闭弹出 ListView

java - 我的 Int() 总是返回 0?

android - 在Android中如何在滑动时获取BottomSheet的当前高度?