在Android当中,用TextView控件来显示文字,实现它的事件来跳转。

例如微博话题 提到的人,当点击这些文本时会跳到另外一个页面或指定的某个网页

1、创建我们自己的一个clickspan子类

public class weiboclickspan extends ClickableSpan {
private onTextViewClickListener mListener;

@Override
public void onClick(View arg0) {
mListener.clickTextView();
}
public weiboclickspan(onTextViewClickListener listener) {
this.mListener = listener;
}

@Override
public void updateDrawState(TextPaint ds) {
mListener.setStyle(ds);
}
}


2、实现WeiboContentTestActivity

public class WeiboContentTestActivity extends Activity {

private static final String CONTENT = "#HELLO#  aaaaa啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊";
// private static final String CONTENT =
// "#HELLO#  aaaaa啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!! @world";
private static final Pattern topicPattern = Pattern.compile("#\\w+#");
// private static final Pattern nickPattern=Pattern.compile("@\\w+");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView mTv = (TextView) findViewById(R.id.tv1);
mTv.setText(CONTENT);
SpannableString ss = new SpannableString(mTv.getText());

setkeywordClickable(mTv, ss, topicPattern, new weiboclickspan(
new onTextViewClickListener() {
@Override
public void clickTextView() {
Intent it = new Intent(Intent.ACTION_VIEW);
it.setData(Uri.parse("http://www.baidu.com"));
startActivity(it);
}

@Override
public void setStyle(TextPaint ds) {
ds.setColor(Color.BLUE);// 颜色
ds.setUnderlineText(false);// 是否有下划线
}
}));
}


// 设置某个具体关键字被点击
public void setkeywordClickable(TextView tv, SpannableString ss,
Pattern pt, ClickableSpan cs) {
Matcher mc = pt.matcher(ss.toString());
while (mc.find()) {
String key = mc.group();
if (!"".equals(key)) {
int start = ss.toString().indexOf(key);
int end = start + key.length();
setClickTextView(tv, ss, start, end, cs);
}
}
}

// 设置textview中的字段可点击
public void setClickTextView(TextView tv, SpannableString ss, int start,
int end, ClickableSpan cs) {
ss.setSpan(cs, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ss);
tv.setMovementMethod(LinkMovementMethod.getInstance());
}

public interface onTextViewClickListener {
public void clickTextView();
public void setStyle(TextPaint ds);
}
}


更多相关文章

  1. Decompiled .class file,bytecode version:52.0(Java 8) Source
  2. invisible visible gone
  3. android混淆与反射
  4. 启动uiautomatorviewer后,点击获取模拟器的时候,出现Unable to con
  5. android 动态设置控件的高度,使用对应布局中的dp值
  6. Android透明度的设置(transparent translucent)
  7. Android(安卓)List Background and item Background
  8. (Android学习之路)Android中listView结合自定义适配器,并实现item
  9. Android之PopupWindow+ListView+在item顶部底部跳跃

随机推荐

  1. Android(安卓)HAL 是如何被调用的
  2. Android基本功:事件处理
  3. android嵌入式底层开发教程
  4. Android开发之Serializable 和 Parcelabl
  5. Android(安卓)ProgressBar的使用!
  6. 2012 年新推出的 Android(非游戏)应用中,哪
  7. android视频监控的解决方案探讨
  8. 使用HTML来生产Android界面
  9. android混淆代码bug跟踪
  10. android onPause()和onStop()区别