admin
2022-08-09 399ac289f80b7a40aa4210341db6b447cacdcf14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.tejia.lijin.app.util.ui;
 
import android.content.Context;
import android.content.Intent;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.View;
 
import com.tejia.lijin.app.ui.invite.ShareBrowserActivity;
 
public class TextViewUtil {
 
    /**
     * 获取可以点击的html内容
     *
     * @param html
     * @param context
     * @return
     */
    public static CharSequence getClickableHtml(String html, Context context, Integer color) {
        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, context, color, null);
        }
        return clickableHtmlBuilder;
    }
 
    public static CharSequence getClickableHtml(String html, Context context, Integer color, URLClickListener urlClickListener) {
        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, context, color, urlClickListener);
        }
        return clickableHtmlBuilder;
    }
 
    public static CharSequence getClickableHtml(Spanned spannedHtml, Context context, Integer color) {
        SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
        URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
        for (final URLSpan span : urls) {
            setLinkClickable(clickableHtmlBuilder, span, context, color, null);
        }
        return clickableHtmlBuilder;
    }
 
    public static CharSequence getClickableHtml(Spanned spannedHtml, Context context, Integer color, URLClickListener urlClickListener) {
        SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
        URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
        for (final URLSpan span : urls) {
            setLinkClickable(clickableHtmlBuilder, span, context, color, urlClickListener);
        }
        return clickableHtmlBuilder;
    }
 
    /**
     * 设置点击超链接对应的处理内容
     */
    private static void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan, final Context context, final Integer linkColor, final URLClickListener urlClickListener) {
        int start = clickableHtmlBuilder.getSpanStart(urlSpan);
        int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
        int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
 
        clickableHtmlBuilder.setSpan(new ClickableSpan() {
            public void onClick(View view) {
                if (urlClickListener != null) {
                    urlClickListener.onClick(urlSpan.getURL());
                } else {
                    context.startActivity(new Intent(context, ShareBrowserActivity.class).putExtra("url", urlSpan.getURL()));
                }
            }
 
            public void updateDrawState(TextPaint ds) {
                if (linkColor != null)
                    ds.setColor(linkColor);
                //设置是否要下划线
                ds.setUnderlineText(false);
                ds.clearShadowLayer();
            }
        }, start, end, flags);
        //防止点击事件不响应
        clickableHtmlBuilder.removeSpan(urlSpan);
    }
 
 
    public static interface URLClickListener {
 
        public void onClick(String url);
 
    }
 
}