Преобразование текста в TextView в ссылки, которые запускают действие - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть TextView, который содержит (возможно, большую) строку, которая может содержать одну или несколько «ссылок». Эти ссылки не являются стандартными "www." ссылки, а скорее они должны будут начать новую деятельность. Как взять большой текст, отсканировать его на слова, начинающиеся с «/ r /» или «r /», и заменить эти слова на интерактивные элементы, которые запустят действие? Я подозреваю, что мне нужно использовать Linkify , но, посмотрев на некоторые примеры, мне все еще неясно, как его использовать.

Ниже приведен пример текста, который мне нужно преобразовать в ссылки (обратите внимание, что выделенный жирным шрифтом текст - это фрагменты, которые необходимо преобразовать в ссылки):

Некоторый текст, который имеет / r / несколько ссылок. Этот r / text может иметь много / r / много ссылок.

1 Ответ

0 голосов
/ 08 ноября 2018

Используйте ClickableSpan. Вот пример того, как охватить текст:

    String text = "Some very nice text here. CLICKME. Don't click me.";
    String word = "CLICKME";
    // when user clicks that word it opens an activity

    SpannableStringBuilder ssb = new SpannableStringBuilder(text);
    int position = text.indexOf(word); // find the position of word in text
    int length = word.length(); // length of the span, just for convenience

    ClickableSpan mySpan = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Intent mIntent = new Intent(this, SecondActivity.class);
            startActivity(mIntent);
        }
    };

    ssb.setSpan(mySpan, position, (position+length), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // setSpan needs 4 things: a Span object, beginning of the span, end of span, and 
    // and a modifier, which for now you can just c&p

    TextView txtView = findViewById(R.id.txt);
    txtView.setClickable(true);
    txtView.setMovementMethod(LinkMovementMethod.getInstance());
    // dont delete this last line. Without it, clicks aren't registered

    txtView.setText(ssb);

Вы можете установить несколько интервалов в разных местах текста, и все они будут делать то, что вы им скажете в onClick()

...