Андроид с пространством, не работающим для этого случая. Зачем?
Мне нужно выделить и сделать 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 разных слова, а не как сгруппированные как одно слово.
Я не могу понять, что не так в плане разделения пространства.
Пожалуйста, помогите мне узнать.
Ответы
Ответ 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.
Спасибо. Упование помогает