2

我试图完成的是大多数 twitter 应用程序中的标准操作,在文本视图中,文本字符串中的单词之前可能有一个“@”提及或一个“#”标签,他们实际上能够添加一个点击监听器到启动另一个活动的那个词,有谁知道这是如何实现的?下面我附上了一张示例照片,展示了我正在努力实现的目标,任何帮助都会大有帮助,谢谢

在此处输入图像描述

4

2 回答 2

7

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

以下内容已从本文中提取:

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

模式用于从给定的正则表达式创建新模式,例如上面的示例,它在给定的文本中捕获任何文本,如@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>

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

Uri data = getIntent.getData();
if(data != null){
    String uri = data.toString();
    username = uri.substring(uri.indexOf("@")+1);
}
于 2012-11-18T16:47:36.090 回答
-1

试试这个方法......

TextView tv[] = new TextView[subCategory.length];
    for (int i = 0; i < subCategory.length; i++) {
            tv[i] = new TextView(this);
            tv[i].setText(subCategory[i]);
            tv[i].setId(i);
            sCategoryLayout.addView(tv[i]);
            tv[i].setOnClickListener(onclicklistener);
        }

onclicklistener 方法:

OnClickListener onclicklistener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == tv[0]){
            //do whatever you want....
        }
    }
};
于 2012-11-18T16:52:24.430 回答