Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找到一个特定的regex单词并linkify以在android中打开一个活动_Android_Regex - Fatal编程技术网

找到一个特定的regex单词并linkify以在android中打开一个活动

找到一个特定的regex单词并linkify以在android中打开一个活动,android,regex,Android,Regex,我从API获取文本,可以是随机的,但它包含类似于FB的表达式 @xyz你好,@abc你好吗?? 1.我需要创建一个正则表达式,以@开头,以空格结尾。 2.链接它以打开用户活动,如XYZ或ABC。 请帮帮我,我试着创建一个类 import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.method.LinkMovementMe

我从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());

@斯滕纳文。。但是,我必须删除xml中的autoLink=“all”。。因此URL停止链接。。有什么想法吗。。我也在做那件事。。不过还是要谢谢你。。帮了我很大的忙。@rajasid,如果你想删除“自动链接”属性,但仍然想在自定义链接下面加下划线,请查看
下划线span
前景颜色span
可点击span
类。@StenaviN。。谢谢我想出了解决办法。我可以同时做这两件事:)如何从URLSpan类开始一项活动?请提供帮助。例如,更改ClickableURLSpan构造函数并传递上下文。或者在onClick(…)中使用widget.getContext()