Я знаю, что эта ветка старая, но на всякий случай, если кто-то хочет выделить строки в текстовом представлении, я создал библиотеку, которая делает именно это. Это мой первый ответ на вопрос о переполнении стека, поскольку я только что присоединился, надеюсь, он отформатирован правильно и актуально. Он использует SpannableString и найдет все вхождения указанной вами строки. Кроме того, встроенный пользовательский ClickableSpan дает вам возможность при желании настроить прослушиватели для текста, по которому щелкают.
Linker
Облегченная библиотека Android для выделения строк внутри текстового представления (без учета регистра) с необязательными обратными вызовами.
Язык: Java
MinSDK: 17
Изображение его функциональности и всего кода можно найти
здесь .
JavaDocs
Чтобы внести в свой проект Android реализацию артефакта:
На уровне проекта build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
На уровне приложения build.gradle
dependencies {
implementation 'com.github.Gaineyj0349:Linker:1.2'
}
Как использовать:
1 - создание объекта Linker с текстовым обзором:
Linker linker = new Linker(textView);
2 - Добавить массив или список строк для выделения в тексте textview:
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
linker.addStrings(list);
* * +1034 И / ИЛИ * * тысячу тридцать-пять
String[] words = new String[]{"One", "Two", "Three"};
linker.addStrings(words);
3 - добавить обратный вызов: (это необязательно):
linker.setListener(new LinkerListener() {
@Override
public void onLinkClick(String charSequenceClicked) {
// charSequenceClicked is the word that was clicked
Toast.makeText(MainActivity.this, charSequenceClicked, Toast.LENGTH_SHORT).show();
}
});
4 - вызов метода обновления компоновщика, чтобы зафиксировать настройку и развернуть настройку .:
linker.update();
У вас всегда есть возможность добавить строки в объект компоновщика, просто убедитесь, что вы вызываете метод update после обновления промежутков.
linker.addStrings("yoda");
linker.update();
Если вам нужен новый лист с тем же объектом компоновщика, просто позвоните
linker.clearLinksList()
Вы также можете настроить ссылки:
1 - настроить все цвета ссылок:
linker.setAllLinkColors(Color.BLUE);
2 - настроить подчеркивание ссылки:
linker.setAllLinkUnderline(false);
3 - Если вы хотите настроить цвет или подчеркивание для определенной строки (обратите внимание, что строка должна быть уже добавлена в компоновщик):
linker.setLinkColorForCharSequence("world", Color.MAGENTA);
linker.setUnderlineModeForCharSequence("world", true);
4 - Если вы хотите использовать различные настройки для каждого слова, вы также можете предоставить объекту компоновщика список или массив LinkProfiles:
ArrayList<LinkProfile> profiles = new ArrayList<>();
profiles.add(new LinkProfile("hello world",
Color.GREEN, false));
profiles.add(new LinkProfile("goodbye cruel world",
Color.RED, false));
profiles.add(new LinkProfile("Whoa awesome!",
Color.CYAN, true));
linker.addProfiles(profiles);
Просто не забудьте вызвать .update () после любых добавлений к объекту компоновщика.
Обратите внимание, что библиотека позаботится о таких тонкостях, как добавление двух одинаковых слов или одинаковых частей слова. Например, если «helloworld» и «hello» - это два слова, добавленные в компоновщик, «helloworld» будет отдаваться предпочтение перед «hello», когда они находятся в одном и том же диапазоне символов. Компоновщик будет сначала сортировать по более крупным словам и отслеживать все промежутки по мере их связывания, избегая как дублирования, так и пересекающихся интервалов.
Лицензировано по лицензии MIT.