Nie wiem, jak sprawić, by określony tekst w TextView stał się ZŁOTY.
to jest tak
txtResult.setText(id+" "+name);
Chcę, aby wynik był taki:
1111 neil
id
i name
są zmiennymi, które pobrałem wartość z bazy danych, i chcę id
pogrubić, ale tylko po id
to, name
aby nie miało to wpływu, nie mam pojęcia, jak to zrobić.
android
textview
android-textattributes
Budi Darmawan
źródło
źródło
Odpowiedzi:
Po prostu zbuduj swój ciąg w HTML i ustaw go:
źródło
Html.fromHtml()
jest teraz przestarzałeChociaż możesz użyć Html.fromHtml () , możesz użyć bardziej natywnego podejścia, którym jest SpannableStringBuilder , ten post może być pomocny.
źródło
Po pierwsze: nie musisz się martwić o użycie kodu niskiej wydajności z odpowiedzi Raghav Sood .
Po drugie: nie musisz pisać funkcji rozszerzenia dostarczonej przez odpowiedź w3bshark podczas korzystania z Kotlina.
Finnaly: Wszystko, co musisz zrobić, to użyć biblioteki Kotlin android-ktx od Google (zobacz tutaj, aby znaleźć więcej informacji i jak włączyć je do swojego projektu):
AKTUALIZACJA:
Ponieważ myślę, że może to pomóc komuś innemu, a także wykazać, jak daleko można się tutaj posunąć, jest więcej przypadków użycia.
Gdy chcesz wyświetlić tekst z niektórymi częściami w kolorze niebieskim i kursywą:
Gdy chcesz wyświetlić tekst pogrubiony i kursywą:
W skrócie
bold
,append
,color
iitalic
są to funkcje rozszerzające sięSpannableStringBuilder
. Możesz zobaczyć inne funkcje rozszerzenia w oficjalnej dokumentacji , z których możesz pomyśleć o innych możliwościach.źródło
Myślałem, że wybrana odpowiedź nie przyniosła zadowalającego wyniku. Napisałem własną funkcję, która wymaga 2 ciągów; Pełny tekst i część tekstu, którą chcesz pogrubić.
Zwraca SpannableStringBuilder z pogrubionym tekstem „textToBold” z „tekstu”.
Uważam, że umiejętność pogrubienia podciągów bez zawijania ich w tagach jest przydatna.
źródło
Jak powiedział wtsang02, użycie HTML jest kosztownym kosztem. Wystarczy użyć natywnego rozwiązania. Jeśli nie musisz modyfikować łańcucha, użyj SpannableString, a nie SpannableStringBuilder.
źródło
Jeśli chcesz użyć ciągu z XML, możesz zrobić coś takiego:
strings.xml (część „CDATA” jest ważna, w przeciwnym razie nie będzie działać)
plik układu
kod
źródło
<string name="test"><b>text bold</b> other text</string>
. Nie działa, jeśli napiszę<![CDATA[
To proste, wystarczy na przykład zamknąć określony tekst w ten sposób
<b>"your text here:"</b>
wynik: Siedziba: Mooresville, Karolina Północna, USA
źródło
Jeśli korzystasz z Kotlin, staje się to jeszcze łatwiejsze
core-ktx
, ponieważ zapewnia on język specyficzny dla domeny (DSL) do tego:Więcej dostępnych opcji to:
W końcu możesz po prostu:
źródło
Oto lepsze rozwiązanie, jeśli chcesz pogrubić wiele tekstów. Poprawiłem kod Eitana. dzięki Eitan.
źródło
Na podstawie odpowiedzi @ mladj0ni mam poniższy kod do pracy. Problem polegał na tym, że jeśli używasz String.format , usuwa on znaczniki HTML, więc musisz uciec od symboli nawiasów w strings.xml:
strings.xml:
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
code.java:
To prostsze niż SpannableStringBuilder. Jeśli chodzi o wydajność, jeśli wyświetlasz tylko jeden ciąg, użytkownik nie zauważy dodatkowej milisekundy, aby go przeanalizować.
Zobacz dokumentację tutaj .
źródło
Możesz użyć tego kodu, aby pogrubić część tekstu. Dla wszystkiego, co znajduje się pomiędzy pogrubionymi znacznikami HTML, spowoduje to pogrubienie.
źródło
Spróbuj tego. To zdecydowanie może pomóc
źródło
Ustaw pierwszy znak łańcucha jako możliwy do spanowania podczas wyszukiwania znaku na liście / recykler jak
poprzednio tak podkreślałem, ale chciałem być jak poniżej
w tym celu szukałem długości słowa, jeśli jest równa 1, oddzieliłem ciąg główny na słowa i oblicziłem pozycję początkową słowa, a następnie szukałem słowa zaczynającego się od char.
źródło
Przybyłem tutaj, aby zapewnić bardziej aktualne rozwiązanie, ponieważ nie byłem zadowolony z istniejących odpowiedzi. Potrzebowałem czegoś, co działałoby w przypadku przetłumaczonych tekstów i nie miałoby takiej wydajności, jak użycie
Html.fromHtml()
. Jeśli używasz Kotlin, tutaj jest funkcja rozszerzenia, która z łatwością ustawi pogrubienie wielu części tekstu . Działa to tak samo, jak Markdown, aw razie potrzeby można je rozszerzyć o obsługę innych tagów Markdown.źródło
Odpowiedź wtsang02 jest najlepszym sposobem, aby to zrobić, ponieważ Html.fromHtml („”) jest teraz przestarzałe. Tutaj zamierzam go trochę ulepszyć dla każdego, kto ma problem z dynamicznym pogrubieniem pierwszego słowa, bez względu na wielkość zdania.
Najpierw stwórzmy metodę uzyskania pierwszego słowa:
Powiedzmy teraz, że masz długi ciąg:
I chcesz, aby twoje zdanie było jak [email protected] chcesz być twoim przyjacielem! Wszystko, co musisz zrobić, to zdobyć pierwsze słowo i uzyskać jego długość, aby pierwsze słowo było odważne, mniej więcej tak:
Teraz wystarczy wykonać kroki wtsang02 , takie jak to:
I to wszystko! Teraz powinieneś być w stanie pogrubić słowo o dowolnym rozmiarze z długiego / krótkiego zdania. Mam nadzieję, że to komuś pomoże, szczęśliwego kodowania :)
źródło
To jest funkcja rozszerzenia Kotlin, której używam do tego
Stosowanie:
.
źródło
Możesz dodać dwa ciągi osobno w kreatorze, jeden z nich jest ciągnięty, drugi jest zwykły. W ten sposób nie musisz obliczać indeksów.
źródło
jeśli pozycja pogrubionego tekstu jest stała (np. jeśli jest na początku textView), wówczas użyj dwóch różnych textView z tym samym tłem. Następnie możesz pogrubić tekst innego stylu textView.
Będzie to wymagało dwukrotnej pamięci w porównaniu do pojedynczego tekstu, ale prędkość wzrośnie.
źródło
Kolejny bardziej spersonalizowany kod
źródło
W przypadku, gdy ktoś używa powiązania danych. Możemy zdefiniować adapter wiązania w ten sposób
Następnie możemy użyć go w TextView
gdzie jest pogrubiony tekst
źródło
Znaleźliśmy sposób, w przypadku gdy chcesz obsługiwać lokalizację w wielu językach, jest to nudne, ale działa, załóżmy, że chcemy:
Po angielsku:
Po hiszpańsku:
Musisz utworzyć 3 ciągi
Język angielski:
Hiszpański:
Teraz możesz to zrobić:
źródło
Twój zasób String
twoja klasa java
źródło
Oto moje kompletne rozwiązanie dla dynamicznych wartości Ciągów ze sprawdzaniem wielkości liter.
Na przykład. completeString = "I BOLD"
PRZYPADEK I, jeśli
*targetStringToFormat* = "bold"
i*matchCase* = true
PRZYPADEK II, jeżeli
*targetStringToFormat* = "bold"
i*matchCase* = false
Aplikować:
Mam nadzieję, że to pomaga!
źródło