Подтвердить что ты не робот

Android: запуск активности из интерактивного текста

Есть ли способ запустить операцию из части строки.

например, У меня это в файле strings.xml:

<string name="clickable_string">This is a <u>clickable string</u></string>

Я хотел бы, чтобы текст между тегами u был подчеркнутым и запускал действие при щелчке при вставке в TextView

4b9b3361

Ответ 1

Попробуйте это,

final Context context = ... // whereever your context is
CharSequence sequence = Html.fromSource(context.getString(R.string.clickable_string));
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
UnderlineSpan[] underlines = strBuilder.getSpans(UnderlineSpan.class);
for(UnderlineSpan span : underlines) {
   int start = strBuilder.getSpanStart(span);
   int end = strBuilder.getSpanEnd(span);
   int flags = strBuilder.getSpanFlags(span);
   ClickableSpan myActivityLauncher = new ClickableSpan() {
     public void onClick(View view) {
       context.startActivity(getIntentForActivityToStart());
     }
   };

   strBuilder.setSpan(myActivityLauncher, start, end, flags);
}

TextView textView = ...
textView.setText(strBuilder);
textView.setMovementMethod(LinkMovementMethod.getInstance());

В принципе, вы должны прикрепить объект Span к диапазону символов, которые вы хотите кликать. Поскольку вы используете HTML в любом случае, вы можете использовать интервалы подчеркивания, помещенные в Html.fromSource() в качестве маркеров для ваших собственных интервалов.

В качестве альтернативы вы также можете определить тег в строке, о которой вы знаете. т.е. <activity> И поставьте свой собственный обработчик меток в метод Html.fromSource(). Таким образом, ваш экземпляр TagHandler мог бы сделать что-то вроде: окружить тег с текстом определенным цветом, подчеркнуть, полужирным шрифтом и сделать его интерактивным. Однако я бы рекомендовал только подход TagHandler, если вы очень сильно написали этот тип кода.

Ответ 2

присвойте эту строку одному из ваших xml-макетов, а затем в вашем коде получите идентификатор TextView, а затем реализуйте OnClickListener для этого Textview, внутри которого вы можете начать свою новую деятельность, которую хотите.

Ответ 3

Ответ здесь Сделать части текстового кликабельными (не URL) Я просто сделал модификацию, если вы хотите использовать ее с HTML-сообщением, сделайте следующее В вашей функции отображения

public void displayText(String message) {

            chapterTextView.setText(Html.fromHtml(message),TextView.BufferType.SPANNABLE);
            chapterTextView.setMovementMethod(LinkMovementMethod.getInstance());
            Spannable clickableMessage = (Spannable) chapterTextView.getText();
            chapterTextView.setText(addClickablePart(clickableMessage), BufferType.SPANNABLE);
}

Измененная функция addClickablePart

private SpannableStringBuilder  addClickablePart(Spannable charSequence) {
        SpannableStringBuilder  ssb = new SpannableStringBuilder(charSequence);

        int idx1 = charSequence.toString().indexOf("(");
        int idx2 = 0;
        while (idx1 != -1) {
            idx2 = charSequence.toString().indexOf(")", idx1) + 1;

            final String clickString = charSequence.toString().substring(idx1, idx2);
            ssb.setSpan(new ClickableSpan() {

                @Override
                public void onClick(View widget) {
                    Toast.makeText(getActivity(), clickString,
                            Toast.LENGTH_SHORT).show();
                }
            }, idx1, idx2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            idx1 = charSequence.toString().indexOf("(", idx2);
        }

        return ssb;
    }

Надеюсь, что это поможет кому-то.