gpt4 book ai didi

android - SpannableString 中可点击对象中的边框

转载 作者:太空狗 更新时间:2023-10-29 13:30:29 26 4
gpt4 key购买 nike

目前我有一个 SpannableString 对象,其中设置了多个 Clickable 对象。因此,一个字符串有许多可点击对象,并且根据用户点击的单词/部分,应用程序将继续并处理该点击事件。前几天我在 stackoverflow 上问过关于去除 SpannableString 中部分单词的蓝色下划线的问题,答案是将 ClickableSpan 类子类化,并覆盖 updateDrawState 方法并将 underlineText 设置为 false,这有效。

我的问题:是否可以在 SpannableString 中的 Clickable 对象周围放置一个边框?所以基本上每个可点击对象/字符串都必须有自己的边框。

我认为 updateDrawState 方法也许可以提供帮助,但它没有。有人知道如何实现吗?

谢谢。

最佳答案

我扩展了 ReplacementSpan 来制作一个轮廓跨度。不幸的是,I can't manage to make them wrap ,但如果您只想将大纲应用于几个单词,它应该可以正常工作。要使其可点击,您只需使用您提到的子类 setSpan(ClickableSpanWithoutUnderline...),然后再设置它。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_replacement_span);

final Context context = this;
final TextView tv = (TextView) findViewById(R.id.tv);


Spannable span = Spannable.Factory.getInstance().newSpannable("Some string");
span.setSpan(new BorderedSpan(context), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.setText(span, TextView.BufferType.SPANNABLE);
}


public static class BorderedSpan extends ReplacementSpan {
final Paint mPaintBorder, mPaintBackground;
int mWidth;
Resources r;
int mTextColor;

public BorderedSpan(Context context) {
mPaintBorder = new Paint();
mPaintBorder.setStyle(Paint.Style.STROKE);
mPaintBorder.setAntiAlias(true);

mPaintBackground = new Paint();
mPaintBackground.setStyle(Paint.Style.FILL);
mPaintBackground.setAntiAlias(true);

r = context.getResources();

mPaintBorder.setColor(Color.RED);
mPaintBackground.setColor(Color.GREEN);
mTextColor = Color.BLACK;
}

@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
//return text with relative to the Paint
mWidth = (int) paint.measureText(text, start, end);
return mWidth;
}

@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
canvas.drawRect(x, top, x + mWidth, bottom, mPaintBackground);
canvas.drawRect(x, top, x + mWidth, bottom, mPaintBorder);
paint.setColor(mTextColor); //use the default text paint to preserve font size/style
canvas.drawText(text, start, end, x, y, paint);
}
}

关于android - SpannableString 中可点击对象中的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026577/

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