找到一个特定的正则表达式单词并链接以在 android 中打开活动



我从API获取文本,可以是随机的,但它包含像FB一样的表达式@xyz 嗨,@abc你怎么??1.我需要创建一个正则表达式,以@开头,以空格结尾。2.链接它以打开XYZ或ABC等用户活动。请帮助我,我尝试创建一个类,例如,

import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;
public class ClickSpan extends ClickableSpan {
    private OnClickListener mListener;
    public ClickSpan(OnClickListener listener) {
        mListener = listener;
    }
    @Override
    public void onClick(View widget) {
        if (mListener != null) mListener.onClick();
    }
    public interface OnClickListener {
        void onClick();
    }

    /**
     * To clickify a textview
     * @param view
     * @param clickableText
     * @param listener
     */
    public static void clickify(TextView view, final String clickableText, 
            final ClickSpan.OnClickListener listener) {
        CharSequence text = view.getText();
        String string = text.toString();
        ClickSpan span = new ClickSpan(listener);
        int start = string.indexOf(clickableText);
        int end = start + clickableText.length();
        if (start == -1) return;
        if (text instanceof Spannable) {
            ((Spannable)text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            SpannableString s = SpannableString.valueOf(text);
            s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            view.setText(s);
        }
        MovementMethod m = view.getMovementMethod();
        if ((m == null) || !(m instanceof LinkMovementMethod)) {
            view.setMovementMethod(LinkMovementMethod.getInstance());
        }
    }
} 

并像这样打电话,

clickify(textView, clickText,new ClickSpan.OnClickListener()
     {
        @Override
        public void onClick() {
           startActivity here..
        }
    });

我需要有关如何使其适用于我的活动以创建正则表达式循环的帮助。

public class ClickableURLSpan extends URLSpan {
    public ClickableURLSpan(String url) {
        super(url);
    }
    @Override
    public void onClick(View widget) {
        String clickedText = getURL();
            // START your activity here
    }
}

现在,您可以链接文本:

CharSequence input = "@xyz hi, @abc how u??!";
SpannableStringBuilder builder = new SpannableStringBuilder(input);
Pattern pattern = Pattern.compile("@.*?\s");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    int start = matcher.start();
    int end = matcher.end();
    String text = input.subSequence(start, end).toString();
    ClickableURLSpan url = new ClickableURLSpan(text);
    builder.setSpan(url, start, end, 0);
}
textView.setText(builder);
textView.setMovementMethod(LinkMovementMethod.getInstance());

最新更新