android 多个span,多重匹配并在SpanableString中替换android

这是我的代码。

SpannableStringBuilder ss = new SpannableStringBuilder(str);

Pattern userNamePattern = Pattern.compile("\\[(.*?)\\]");

Matcher userNameMatcher = userNamePattern.matcher(ss);

while (userNameMatcher.find()) {

final int start = userNameMatcher.start();

final int end = userNameMatcher.end();

ss.setSpan(new ClickableSpan() {

final String clickString = str.substring(start,end);

@Override

public void onClick(View widget) { }

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

ds.setUnderlineText(false);

}

}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

ss.replace(start, end, str.substring(start+1,end-1));

}

它取代文字,但不给最好的结果。

例如,如果测试是[A] b [cd] e那么结果是A b [ccd 我需要的结果是A b cd e。

我该如何做到这一点我在这里做错了。

+0

由于您正在尝试在此处进行标记,因此您当前的输入和预期输出并不能说明整个故事。在这种情况下,您可能实际上需要包含几个小屏幕捕获来说明发生了什么。 –

+0

什么屏幕捕捉它的完整问题。预期的输出不返回。 –

+0

请参阅https://pastebin.com/raw/w2Fx2cdq –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在SpannableStringBuilder对齐位图,可以使用Imagespan和LeadingMarginSpan组合来实现。具体的步骤如下: 1. 创建一个Bitmap对象,用于表示要插入的位图。 2. 创建一个ImageSpan对象,并将Bitmap对象作为其参数,设置ImageSpan的对齐方式。 3. 创建一个LeadingMarginSpan对象,并将其与ImageSpan对象一起添加到SpannableStringBuilder。 4. 在SpannableStringBuilder插入文本,并将ImageSpan和LeadingMarginSpan应用于文本。 示例代码如下: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); // 创建位图 ImageSpan imageSpan = new ImageSpan(this, bitmap, ImageSpan.ALIGN_BASELINE); // 创建ImageSpan对象 LeadingMarginSpan marginSpan = new LeadingMarginSpan.Standard(bitmap.getWidth()); // 创建LeadingMarginSpan对象 SpannableStringBuilder builder = new SpannableStringBuilder("插入位图"); // 创建SpannableStringBuilder对象 builder.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 将ImageSpan应用于文本 builder.setSpan(marginSpan, 0, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 将LeadingMarginSpan应用于文本 TextView textView = findViewById(R.id.text_view); textView.setText(builder); // 将SpannableStringBuilder显示在TextView ``` 在上面的示例代码,我们首先创建了一个位图对象,然后创建一个ImageSpan对象,并将位图对象作为其参数。我们将ImageSpan的对齐方式设置为ALIGN_BASELINE,表示将位图与文本基线对齐。接下来,我们创建了一个LeadingMarginSpan对象,并将其与ImageSpan对象一起添加到SpannableStringBuilder。最后,我们将SpannableStringBuilder显示在TextView

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值