我正在尝试创建一个聊天屏幕,并在消息内实现基于@
的用户注释。为此,我在跨度上实现了ClickableSpan类。此问题分为三部分。
1)在发送消息时(在我的EditText内部),用户单击的任何用户注释都应将其带到注释末尾。示例-键入“ @ my_user @这是示例消息” 时,如果用户触摸_,则光标应设置在@ my_user @ |的末尾
2)已发送消息气泡-注释应可点击
3)收到的消息气泡-注释应该是可点击的
在我的情况下,TextView中的2.和3.正常工作。我需要了解如何使1正常工作
下面的代码:->
设置跨度
editable.setSpan(new UserAnnotationClickableSpan(editable.toString().substring(style.getStart() + keywordLength, style.getEnd() - keywordLength + 1)) , style.getStart() + keywordLength, style.getEnd() - keywordLength + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
UserAnnotationClickableSpan类
private class UserAnnotationClickableSpan extends ClickableSpan{
String text;
public UserAnnotationClickableSpan(String text){
this.text = text;
}
@Override
public void onClick(View view) {
Log.d(Config.LOGTAG, "Clickable area called in text box");
Spanned s;
boolean isEditing = false;
EditMessage em;
TextView tv;
// Notify clickable span handler
if(view instanceof EditMessage){ // then user it typing.
isEditing = true;
em = (EditText) view;
s = (Spanned) em.getText();
int start = s.getSpanStart(this);
int end = s.getSpanEnd(this);
em.setSelection(end);
}else { // its either a
tv = (TextView) view;
s = (Spanned) tv.getText();
int start = s.getSpanStart(this);
int end = s.getSpanEnd(this);
String str = tv.getText().toString().trim();
Log.d(Config.LOGTAG, "Clicked annotation is : " + text);
}
}
};
答案 0 :(得分:0)
使用此代码将光标置于末尾
editText.setSelection(editText.getText()。length());