同一個 TextView 設定多個樣式多個點選事件
阿新 • • 發佈:2019-02-14
先看樣式圖片( 評論內容為一個 TextView ):
xml 檔案中不給出程式碼了,就是一個容器裡面有一個 TextView ;
下面是 Activity 程式碼:
String oneName = "直男";//第一個人
String twoName = "汙女";//第二個人
String commentContext = "你在幹嘛";//第一個人回覆第二個人的內容
int oneNameSize = oneName.length();
int twoNameSize = twoName.length();
SpannableString spannableInfo = new SpannableString(oneName + "回覆" + twoName + ":" + commentContext);
//第一個人(直男)的樣式,點選事件
spannableInfo.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FFFFAA00"));//設定顏色
ds.setUnderlineText(false);//去掉下劃線
}
@Override
public void onClick(View view) {
//設定直男的點選事件
Log.e("=====","直男");
}
}, 0, oneNameSize, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//"回覆"兩個字的樣式
spannableInfo.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FF151515"));//設定顏色
ds.setUnderlineText(false);//去掉下劃線
}
@Override
public void onClick(View widget) {
}
}, oneNameSize , twoNameSize + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//第2個人(汙女)的樣式,點選事件
spannableInfo.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FFFFAA00"));//設定顏色
ds.setUnderlineText(false);//去掉下劃線
}
@Override
public void onClick(View view) {
//設定汙女的點選事件
Log.e("=====","汙女");
}
}, twoNameSize + 2, oneNameSize + twoNameSize + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//內容的點選事件和樣式
spannableInfo.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#FF151515"));//設定顏色
ds.setUnderlineText(false);//去掉下劃線
}
@Override
public void onClick(View view) {
//設定內容的點選事件
Log.e("=====","內容");
}
}, oneNameSize + twoNameSize + 2, spannableInfo.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setHighlightColor(Color.TRANSPARENT); //設定點選後的顏色為透明,否則會一直出現高亮
textview.append(spannableInfo);
textview.setMovementMethod(LinkMovementMethod.getInstance());//開始響應點選事件
更多好內容戳下面: