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