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

Андроид с пространством, не работающим для этого случая. Зачем?

Мне нужно выделить и сделать URL в тексте кликабельным, динамически.

Для этого я использую метод ниже

private SpannableString addClickablePart(String string) {


        string = string.replaceAll("\\n"," \n ");

        string += " ";
        SpannableString ss = new SpannableString(string);
        String[] words = string.split(" ");
        for (final String word : words) {


            if (CommonUtilities.isValidURL(word)) {


                int lastIndex = 0;

                while(lastIndex != -1){

                    lastIndex = string.indexOf(word+" ",lastIndex);

                    if(lastIndex != -1){
                        ClickableSpan clickableSpan = new ClickableSpan() {
                            @Override
                            public void onClick(View textView) {
                                //use word here to make a decision

                                isRefreshingNecessary = false;

                                Intent mIntent = new Intent(ctx, UserWebsiteActivity.class);
                                mIntent.putExtra("website", word);
                                startActivity(mIntent);
                            }
                        };

                        ss.setSpan(clickableSpan, lastIndex, lastIndex + word.length(),
                                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

                        lastIndex += word.length();
                    }
                }


            }
        }

        return ss;
    }

Его работа для большинства случаев. Но, не работая во всех случаях в качестве приведенного ниже примера.

Информация о ценах, предоставленная вам в ваших условиях плана и условия об этих диапазонах номеров больше не будут применяться и будут заменяется этой структурой зарядки. См. Www.ee.co.uk/ukcalling для Дополнительная информация.

Как, в приведенном выше случае, когда я разбил всю строку, используя

 String[] words = string.split(" ");

или

 String[] words = string.split("\\s+");

Я получил See www.ee.co.uk/ukcalling for как одно слово. Вместо этого мне нужны эти 3 - See, www.ee.co.uk/ukcalling и for как 3 разных слова, а не как сгруппированные как одно слово.

Я не могу понять, что не так в плане разделения пространства. Пожалуйста, помогите мне узнать.

4b9b3361

Ответ 1

Замените все не видимые пробелы.

 string = string.replaceAll("\\t", " ");
 string = string.replaceAll("\\xA0", " ");
 string = string.replaceAll("\\u1680", " ");
 string = string.replaceAll("\\u180e", " ");
 string = string.replaceAll("\\u2000", " ");
 string = string.replaceAll("\\u200a", " ");
 string = string.replaceAll("\\u202f", " ");
 string = string.replaceAll("\\u205f", " ");
 string = string.replaceAll("\\u3000", " ");

для java 8

string = string.replaceAll("(^\\h*)|(\\h*$)","");

проверьте how-to-trim-no-break-space-in-java

Ответ 2

Попробуйте это. он работает во всех случаях Для меня

 SpannableString ss = new SpannableString("Your String");
  ClickableSpan clickableSpan = new ClickableSpan() {
  @Override
   public void onClick(View textView) {
    //Perform Click Here
   }
@Override
public void updateDrawState(TextPaint ds) {
    super.updateDrawState(ds);
    ds.setUnderlineText(false);
}
};

ss.setSpan(clickableSpan, pos, last+5, Spanned.SPAN_USER);


    desc.setText(ss);
    desc.setMovementMethod(LinkMovementMethod.getInstance());
    desc.setHighlightColor(Color.TRANSPARENT);

Обратите внимание, что desc - это мой TextView, которому я устанавливаю String. Спасибо. Упование помогает