Заменить определенную строку на Spans без HTML
Я пытаюсь заменить определенную строку диапазоном.
Например, у меня есть эта строка:
String s = "redHello greenWorld";
Я хочу заменить "красный" на:
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
и «зеленый» с:
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#00FF00")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Итак, я создаю modifiedText следующим образом:
Spannable modifiedText = new SpannableString(s);
Как я могу заменить определенную строку на Span без HTML?
2 ответа
Раз уж вы спросили об вырезании - надеюсь, вы это имели в виду
public static void main(String[] args) {
String str = "redHello greenWorld";
String lastElement = "";
String output = "";
Boolean foundOne = true;
Map<String, List<Integer>> pos = new HashMap<String, List<Integer>>();
pos.put("red", new ArrayList<Integer>());
pos.put("green", new ArrayList<Integer>() );
String[] temp = {""};
while (true) {
for (Map.Entry<String, List<Integer>> entry : pos.entrySet()) {
temp = str.split(entry.getKey(),2);
if (temp.length == 1){
foundOne = false;
} else {
foundOne = true;
if(lastElement.isEmpty()){
pos.get(entry.getKey()).add(temp[0].length());
}else {
pos.get(lastElement).add(temp[0].length() -1 );
pos.get(entry.getKey()).add(temp[0].length());
}
lastElement = entry.getKey();
output += temp[0];
str = temp[1];
}
}
if(!foundOne){
pos.get(lastElement).add(temp[0].length());
output += temp[0];
break;
}
}
pos
содержит позиции в целочисленном списке - в этом примере он содержит следующее:
red=[0, 5]
green=[6, 5]
Это означает, что красный должен быть от 0 до 0 + 5, а зеленый должен быть от 6 до 6 + 5.
Также
output
содержит строку с вырезанным
red
и
green
Это действительно плохой код, но он вроде как работает.
не разбивает (подстроку) данный. Он просто меняет атрибуты для данного диапазона с начальным и конечным индексами. Если вы хотите изменить цвет какой-то части, подстрока (или вырезка) не нужна. Просто используйте начальный и конечный индексы, для какой части вы хотите изменить, а остальное останется прежним (исходным). В вашем случае в соответствии с вашим вопросом вы хотите изменить цвет красных и зеленых слов, поэтому просто используйте 2
setSpan
методы с начальным и конечным индексами для этих слов.
String s = "redHello greenWorld";
SpannableString modifiedText = new SpannableString(s);
//Change the color for 'red' word
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//Change the color for 'green' word
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#00FF00")), 9, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Несмотря на то, что он все еще, вы можете использовать его как, если хотите установить как
Text
для тебя
View
. Например, если вы хотите установить это
String
на ваш
TextView
использовать
setText()
метод с вашим
SpannableString
.
textView.setText(modifiedText);