Textview设置超链接点击事件

本文介绍了一种在Android TextView中处理URL点击的方法,通过自定义类实现对TextView内的URL进行匹配并设置点击事件,同时调整点击时的颜色显示。

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

public class TextViewURLOnclick {
    private Context mContext;
    public TextViewURLOnclick(Context context) {
        mContext = context;
    }
    public void setLinkClickIntercept(TextView tv) {
        tv.setMovementMethod(LinkMovementMethod.getInstance());
        CharSequence text = tv.getText();
        if (text instanceof Spannable) {
            Spannable sp = (Spannable) tv.getText();
            initLinks(sp, hyypUrl, tv);
        }
    }

    private void initLinks(Spannable sp, Pattern hyypUrl, TextView tv) {
        Matcher m = hyypUrl.matcher(sp);
        LinkedList<String> urls = new LinkedList<String>();
        while (m.find()) {
            urls.add(m.group());
        }
        String con = tv.getText().toString();
        SpannableStringBuilder spannable = new SpannableStringBuilder(con);
        for (int i = 0; i < urls.size(); i++) {
            String url = urls.get(i);
            int start = con.indexOf(url);
            int end = start + url.length();
            MyURLSpan myURLSpan = new MyURLSpan(url);
            spannable.setSpan(myURLSpan, start,
                    end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
            spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            avoidHintColor(tv);
            tv.setText(spannable);
        }
    }

    /**
     * 处理TextView中的链接点击事件
     */
    private class MyURLSpan extends ClickableSpan {
        private String mUrl;

        MyURLSpan(String url) {
            mUrl = url;
        }

        @Override
        public void onClick(View widget) {
            avoidHintColor(widget);
            Toast.makeText(mContext, mUrl, Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 点击链接的时候,连接背景色设置*
     */
    private void avoidHintColor(View view) {
        if (view instanceof TextView)
            ((TextView) view).setHighlightColor(mContext.getResources().getColor(android.R.color.transparent));
    }
    public static final Pattern hyypUrl
            = Pattern.compile(
            "(((http|ftp|https)://)|(\\s))?(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值