通常我们为textview绑定点击事件只能监听整个textview的点击时间,如我们想获取我们实际点的是哪一个字可通过以下方法实现
(textview可以绑定单击或长按监听器)
textView = (TextView) findViewById(R.id.word);
SpannableStringBuilder s = new SpannableStringBuilder(textView.getText());
for(int i=0;i<s.length();i++){
s.setSpan(new ClickableSpan() {
@Override
public void onClick(View v) {
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(0xff000000); //设置文件颜色
ds.setUnderlineText(false); //设置下划线
}
},i,i+1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
}
//设置textview中所有文字为spannable格式
textView.setText(s,TextView.BufferType.SPANNABLE);
//启用上面为每个字绑定的ClickableSpan
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//若没有绑定clickableSpan,无法使用subSequence方法
//若tv.getSelectionStart()-1,则输出点击的文字以及其上一个文字
//若tv.getSelectionEnd()+1,则输出点击的文字以及其下一个文字,如此类推
//通过标点判断还可截取一段文字中我们所点击的那句话
TextView tv = (TextView) v;
String s = tv
.getText()
.subSequence(tv.getSelectionStart(),
tv.getSelectionEnd()).toString();
Log.d("tapped on:", s);
}
});