如何将单击侦听器添加到Android/Java Textview中的字符串中?

Edm*_*jas 2 java string android textview clicklistener

我试图完成的是大多数Twitter应用程序中的标准,在textview中,文本字符串中的单词前面可能有"@"提及或"#"主题标签,并且它们实际上能够添加单击侦听器启动另一项活动的那个词,有谁知道这是如何实现的?下面我附上了一张示例照片,展示了我想要实现的目标,任何帮助都会有很长的路要走

在此输入图像描述

Rob*_*ill 7

看看Linkify类.它允许您在TextViews中为给定的正则表达式添加链接.

下面是从提取文章:

TextView mText = (TextView) findViewById(R.id.mytext);
Pattern userMatcher = Pattern.compile("\B@[^:\s]+");
String userViewURL = "user://";
Linkify.addLinks(mText, userMatcher, userViewURL);
Run Code Online (Sandbox Code Playgroud)

模式用于从给定的调节器表达式创建新模式,如上面的示例,它捕获给定文本中的任何文本,如@username,然后您必须定义您的user://方案,这也必须在活动中定义,这将捕获点击最后一个Linkify.addLinks使它们全部协同工作.让我们看一下Android.manifest文件的意图过滤器.

<activity android:name=”.DirectMessageActivity” > 
    <intent-filter>
        <category android:name=”android.intent.category.DEFAULT”/> 
        <action android:name=”android.intent.action.VIEW” /> 
        <data android:scheme=”user” /> 
    </intent-filter> 
</activity>
Run Code Online (Sandbox Code Playgroud)

单击@username时,这是将捕获单击并处理单击的字符串的活动.是的,我们没有提到当用户单击@username时发送到DirectMessageActivity的内容,因为您可能会猜测"username"字符串将传递给DirectMessageActivity.你可以像这样得到这个字符串.

Uri data = getIntent.getData();
if(data != null){
    String uri = data.toString();
    username = uri.substring(uri.indexOf("@")+1);
}
Run Code Online (Sandbox Code Playgroud)