Я пытаюсь создать экран чата и внедрить аннотацию пользователя на основе @
внутри сообщения. Для которого я внедрил класс ClickableSpan в span. В этой проблеме есть 3 части.
1) При отправке сообщения (внутри моего EditText) любые пользовательские аннотации, на которые пользователь нажимает, должны переносить их в конец аннотации. Пример - при наборе "@ my_user @ это пример сообщения" , если пользователь касается _, курсор должен быть установлен в конце @ my_user @ |
2) Пузырь отправленного сообщения - аннотация должна быть кликабельной
3) Пузырь полученного сообщения - аннотация должна быть кликабельной
В моем случае 2. и 3. в TextView работают. Мне нужно понять, что я должен сделать, чтобы заставить 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 class
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);
}
}
};