gpt4 book ai didi

具有行间距的 Android spannable 字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:01 26 4
gpt4 key购买 nike

我有一个标签云,其中标签有背景色。不幸的是,我无法获得合适的行间距。

假设这是文本云:

tag1  tag2  tag3
tagtext4 tagtext5

这是 TextView 的样式:

<style name="DataEntryValue" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/gray_value</item>
<item name="android:fontFamily">sans-serif-condensed</item>
</style>

BackgroundColorSpan 用于为标签设置蓝色背景色。然而,线条之间没有空格,即两条线条的背景颜色没有分开。

当我为 TextView 设置行间距时,例如到 12sp,它增加了行间距,但使用标签的背景颜色而不是 textview 背景颜色来建立行间距。

知道如何使用 TextView 背景颜色获得行间距吗?

更新

使用这个 solution作为指导,我想出了这种方法:为文本绘制背景,为文本绘制背景,并在顶部和底部填充,然后绘制文本。由于我以前没有使用过 Canvas ,所以可能有更好的方法。无论如何 - 这是代码。

    public void draw(Canvas canvas, CharSequence text, int start, int end, float x,
int top, int y, int bottom, Paint paint)
{

float padding;
float right
RectF rect;

right = x + measureText(paint, text, start, end);

padding = 4f;

rect = new RectF( x, top, right, bottom );

paint.setColor( mContext.getResources().getColor(R.color.color1) );

rect = new RectF( x, top + padding, right, bottom - padding);

paint.setColor( mContext.getResources().getColor(R.color.bg_color_tag_item) );
canvas.drawRect(rect, paint);

paint.setColor( mContext.getResources().getColor(R.color.data_entry_value) );

canvas.drawText(text, start, end, x, y, paint);
}

现在看起来像这样:

enter image description here

很高兴知道:有更好的解决方案吗?

最佳答案

我找到了一个使用 ReplacementSpan 的更好的解决方案:我们可以覆盖函数 draw 并在我们的文本后面绘制一个矩形。它更灵活。你只需要给它文本高度。

/**
* It's like a {@link android.text.style.BackgroundColorSpan} but we don't paint the extra line height.
* <p/>
*/
public class BackgroundColorWithoutLineHeightSpan extends ReplacementSpan
{
private final int mColor;
private final int mTextHeight;

public BackgroundColorWithoutLineHeightSpan(int color, int textHeight)
{
mColor = color;
mTextHeight = textHeight;
}

@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm)
{
return Math.round(measureText(paint, text, start, end));
}

@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint)
{
int paintColor = paint.getColor();
RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), top + mTextHeight);
paint.setColor(mColor);
canvas.drawRect(rect, paint);
paint.setColor(paintColor);
canvas.drawText(text, start, end, x, y, paint);
}

private float measureText(Paint paint, CharSequence text, int start, int end)
{
return paint.measureText(text, start, end);
}
}

关于具有行间距的 Android spannable 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com