Android TextView中文本点击文字跳转

来源:互联网 发布:星游记网络大电影 编辑:程序博客网 时间:2024/04/30 18:50

在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);
}
}


阅读全文
0 0
原创粉丝点击