Ответы, приведенные здесь, являются правильными, но не могут быть вызваны в цикле, потому что объект StyleSpan
представляет собой единый непрерывный диапазон (не стиль, который может применяться к нескольким промежуткам). Вызов setSpan
несколько раз с тем же жирным шрифтом StyleSpan
создаст один жирный диапазон и просто переместит его в родительском диапазоне.
В моем случае (показывая результаты поиска) , Мне нужно было сделать все экземпляры всех ключевых слов поиска полужирным. Это то, что я сделал:
private static SpannableStringBuilder emboldenKeywords(final String text,
final String[] searchKeywords) {
// searching in the lower case text to make sure we catch all cases
final String loweredMasterText = text.toLowerCase(Locale.ENGLISH);
final SpannableStringBuilder span = new SpannableStringBuilder(text);
// for each keyword
for (final String keyword : searchKeywords) {
// lower the keyword to catch both lower and upper case chars
final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH);
// start at the beginning of the master text
int offset = 0;
int start;
final int len = keyword.length(); // let's calculate this outside the 'while'
while ((start = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) {
// make it bold
span.setSpan(new StyleSpan(Typeface.BOLD), start, start+len, SPAN_INCLUSIVE_INCLUSIVE);
// move your offset pointer
offset = start + len;
}
}
// put it in your TextView and smoke it!
return span;
}
Имейте в виду, что приведенный выше код недостаточно умен, чтобы пропускать двойное смещение, если одно ключевое слово является подстрокой другого. Например, если вы ищете «Fish fi» внутри «Рыбы в засушливом море» , он сделает «рыбу» полужирным шрифтом один раз и затем "fi" . Хорошо, что пока он неэффективен и немного нежелателен, он не будет иметь визуального недостатка, так как ваш отображаемый результат будет по-прежнему выглядеть как
Рыбы в засушливом море
Для выражения , такого как "gr-" + $InputObject.alias
, которое должно быть распознано как один (один, оцененный) аргумент команды , вы должны заключить его в (...)
:
New-UnifiedGroup -Alias ("gr-" + $InputObject.alias) ...
В качестве альтернативы используйте строку "..."
с интерполяцией строки string (расширение строки):
New-UnifiedGroup -Alias "gr-$($InputObject.alias)" ...
Обратите внимание на необходимость заключить вложенные $InputObject.alias
выражение в $(...)
(которое не требуется для простых ссылок на переменные , например "I'm $HOME"
- см. этот ответ для обзора правила расширения строки).
Как насчет
New-UnifiedGroup -Alias $("gr-$InputObject.alias") `
-DisplayName $("gr-$InputObject.displayname") `
-Members $InputObject.members.recipients.value `
-PrimarySmtpAddress $InputObject.emailaddresses.value `
$(...)
вокруг строки с двумя кавычками, но вам нужно ее вокруг выражений i> внутри такой строки (расширяемой); например: "gr-$($InputObject.alias)"
– mklement0
13 July 2018 в 19:40