您的位置:首页 > 其它

同一个TextView不同文字的点击事件

2013-04-10 11:38 393 查看
最近有朋友问到同一个TextView的不同文字点击事件如何实现,由于之前自己做过这方面的东西,但没有把它整理出来,今天上班不是很忙,抽了点时间来整理一个demo,给大家分享一下。好了,废话不多说,上代码和效果图

下载地址链接:

http://download.csdn.net/detail/hap_gx/5241456

package com.example.textviewclick;

import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
TextView mTextView2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textview);

mTextView2 = (TextView)findViewById(R.id.text2);
/*********** 同一个TextView不同文字的点击事件*******/
StringBuilder actionText = new StringBuilder();
actionText
.append("<a style=\"text-decoration:none;\" href='username'>"
+ "username:" + " </a>");
actionText
.append("隐形人"
+ "<a style=\"color:blue;text-decoration:none;\" href='singstar'> "
+ " love" + "</a>");
actionText.append(" : \"" + "孙燕姿" + "\"");
mTextView2.setText(Html.fromHtml(actionText.toString()));
mTextView2.setMovementMethod(LinkMovementMethod
.getInstance());
CharSequence text = mTextView2.getText();
int ends = text.length();
Spannable spannable = (Spannable) mTextView2.getText();
URLSpan[] urlspan = spannable.getSpans(0, ends, URLSpan.class);
SpannableStringBuilder stylesBuilder = new SpannableStringBuilder(text);
stylesBuilder.clearSpans(); // should clear old spans
for (URLSpan url : urlspan) {
TextViewURLSpan myURLSpan = new TextViewURLSpan(url.getURL());
stylesBuilder.setSpan(myURLSpan, spannable.getSpanStart(url),
spannable.getSpanEnd(url), spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mTextView2.setText(stylesBuilder);
}

private class TextViewURLSpan extends ClickableSpan {
private String clickString;

public TextViewURLSpan(String clickString) {
this.clickString = clickString;
}

@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(MainActivity.this.getResources().getColor(R.color.text_color));
ds.setUnderlineText(false); //去掉下划线
}

@Override
public void onClick(View widget) {
if (clickString.equals("username")) {
Toast.makeText(getApplication(), clickString, Toast.LENGTH_LONG)
.show();
} else if (clickString.equals("singstar")) {
Toast.makeText(getApplication(), clickString, Toast.LENGTH_LONG)
.show();
}
}
}

}


下面是点击的效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: