获取一段文字中的某一串并标记成URL,SpannableStringBuilder

本文介绍了一种在Android应用中处理HTML格式文本的方法,并实现了对文本中的链接进行点击事件处理的功能。通过使用SpannableStringBuilder和ClickableSpan,可以有效解析HTML中的链接,并针对这些链接添加自定义的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public CharSequence getClickableHtml(String html) {
		Spanned spannedHtml = Html.fromHtml(html);
		SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
		URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
		for (final URLSpan span : urls) {
			setLinkClickable(clickableHtmlBuilder, span);
		}
		return clickableHtmlBuilder;
	}

	private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) {
		int start = clickableHtmlBuilder.getSpanStart(urlSpan);
		int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
		int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
		ClickableSpan clickableSpan = new ClickableSpan() {
			public void onClick(View view) {
				// Do something with URL here.
				if (!TextUtils.isEmpty(urlSpan.getURL())) {
					int result = urlSpan.getURL().indexOf("tel");
					int result2 = urlSpan.getURL().indexOf("http");
					if (result >= 0) {
						Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(urlSpan.getURL()));
						MessageDetailsActivity.this.startActivity(intent);// 内部类
					} else if (result2 >= 0) {
						Intent intent = new Intent(MessageDetailsActivity.this, ShipWayArrivedExcDetailActivity.class);
						intent.putExtra("title", "订单详情");
						intent.putExtra("orderId", messageInfo.getCustomerOrderNo());
						intent.putExtra("url", urlSpan.getURL());
						startActivity(intent);
					}
				}

			}

		};
		clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值