Clickable Span onClick не вызывается в EditText - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать экран чата и внедрить аннотацию пользователя на основе @ внутри сообщения. Для которого я внедрил класс 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);
            }
        }
    };

1 Ответ

0 голосов
/ 22 января 2019

используйте этот код для установки курсора в конце

editText.setSelection (. EditText.getText () длина ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...