EditText中未调用可点击跨度onClick

时间:2019-01-22 09:30:07

标签: android spannablestring

我正在尝试创建一个聊天屏幕,并在消息内实现基于@的用户注释。为此,我在跨度上实现了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);
            }
        }
    };

1 个答案:

答案 0 :(得分:0)

使用此代码将光标置于末尾

editText.setSelection(editText.getText()。length());