3

EditText と TextWatcher があり、パターンをチェックして ClickableSpans を作成する場所を決定します。

private void checkSpans(){
    Matcher matcher = Pattern.compile("(^|[ \\t\\n])#\\w+").matcher(text);
    while (matcher.find()) {
        BlueClickableSpan[] spans = getText().getSpans(matcher.start(), matcher.end(), BlueClickableSpan.class);
        for (BlueClickableSpan span : spans) {
            text.removeSpan(span);
        }
        text.setSpan(new BlueClickableSpan(),
                matcher.start(),
                matcher.end(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}

これが私のカスタム Span クラスです。

private class BlueClickableSpan extends ClickableSpan {

        @Override
        public void onClick(View view) {
            Spanned s = getText();
            int start = s.getSpanStart(this);
            int end = s.getSpanEnd(this);
            String clickedString = s.subSequence(start, end).toString().trim();
            if (onSpanClick != null)
                onSpanClick.onClick(clickedString);
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(ContextCompat.getColor(IdeaFlowApp.getAppContext(), R.color.main_blue));
        }
    }

問題は、テキストをスパンで終了し、その後に文字がなく、その後にタップすると、スパンへのクリックとしてカウントされ、onClick が呼び出されることです。そのため、スパンの直後にカーソルを置いて編集を続けることができません。しかし、スパンの後の空白であっても、シンボルを印刷すると、スパンの後にカーソルを簡単に配置でき、すべて正常に機能します。クリック可能なスパンの後にシンボルがない場合、編集テキストのクリックを修正する方法はありますか?

4

1 に答える 1