Как найти определенное слово в полном тексте и сделать его гиперссылкой, доступной для просмотра по тексту? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую textview и настройку текста, который я получаю от json,

"Это наша страница с нами, пожалуйста, позвоните нам"

вышеупомянутый текст, который я получаю с сервера, и он отображаетЧто касается третьего пункта повторного просмотра, теперь я пытаюсь найти любой элемент списка, если слово «контакт» есть, я пытаюсь сделать его гиперссылкой и хочу, чтобы оно было кликабельным.но это не работает.

 String fulltext=brandList.get(position).getFAQAnswerText();
        String match="contact";

        if (fulltext.contains(match)) {
            System.out.println("Keyword matched the string" );
             ss = new SpannableString(fulltext);

            ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            ss.setSpan(new URLSpan("tel:4155551212"), 13, 17,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        }
        holder.tvans.setText(ss);
        holder.tvans.setMovementMethod(LinkMovementMethod.getInstance());

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вы можете решить эту проблему с помощью класса SpannableString, метода Below в своей деятельности или утилиты

public static void makeLinks(TextView textView, String[] links, ClickableSpan[] clickableSpans) {
    SpannableString spannableString = new SpannableString(textView.getText());
    for (int i = 0; i < links.length; i++) {
        ClickableSpan clickableSpan = clickableSpans[i];
        String link = links[i];

        int startIndexOfLink = textView.getText().toString().indexOf(link);
        spannableString.setSpan(clickableSpan, startIndexOfLink, startIndexOfLink + link.length(),
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(spannableString, TextView.BufferType.SPANNABLE);
}

И вы должны инициализировать его в своей деятельности следующим образом

Utility.makeLinks(textViewInsance, new String[]{"Your text which need to highlight and click event",}, new ClickableSpan[]{new ClickableSpan() {
        @Override
        public void onClick(View widget) {
        }
    }
    });
0 голосов
/ 24 сентября 2018
  • Вы можете найти конкретное слово из строки, используя:

    if (fullText.toLowerCase (). IndexOf (singleWord.toLowerCase ())> -1) {

    find = true;
    

    }

Сделать текстовую гиперссылку, используя код JAVA:

    TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.kainaatsingha.com'> Kainaat Singha</a>";
textView.setText(Html.fromHtml(text));

Или используя XML

android:autoLink="web"
android:linksClickable="true"
0 голосов
/ 24 сентября 2018
textView.setText("this is clickable text");
if (fulltext.contains("clickable")) {
    setClickableHighLightedText(textView, "clickable", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO: do your stuff here 
        }
    });
}

Поместите этот метод в свой класс Util.

/**
 * use this method to set clickable highlighted a text in TextView
 *
 * @param tv              TextView or Edittext or Button or child of TextView class
 * @param textToHighlight Text to highlight
 */
public void setClickableHighLightedText(TextView tv, String textToHighlight, View.OnClickListener onClickListener) {
    String tvt = tv.getText().toString();
    int ofe = tvt.indexOf(textToHighlight, 0);
    ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
            if (onClickListener != null) onClickListener.onClick(textView);
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(tv.getContext().getResources().getColor(R.color.colorPrimary));
            ds.setUnderlineText(true);
        }
    };
    SpannableString wordToSpan = new SpannableString(tv.getText());
    for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
        ofe = tvt.indexOf(textToHighlight, ofs);
        if (ofe == -1)
            break;
        else {
            wordToSpan.setSpan(clickableSpan, ofe, ofe + textToHighlight.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
            tv.setMovementMethod(LinkMovementMethod.getInstance());
        }
    }
}

Вывод

image

Обновление

  • Изменение цвета диапазона

        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(tv.getContext().getResources().getColor(R.color.spanColor));
        }
    
  • Изменение цвета подсветки / касания

    textView.setHighlightColor(getResources().getColor(R.color.onTouchColor));

...