Czy można mieć symbole zastępcze w wartościach ciągów, string.xml
którym można przypisywać wartości w czasie wykonywania?
Przykład:
jakiś ciąg PLACEHOLDER1 trochę więcej
android
string
string-formatting
android-resources
SoftReference
źródło
źródło
Odpowiedzi:
Formatowanie i stylizacja
Tak, zapoznaj się z następującymi materiałami z zasobów ciągów: Formatowanie i stylowanie
Podstawowe użycie
Zauważ, że
getString
występuje przeciążenie, które wykorzystuje ciąg jako ciąg formatu:Liczba mnoga
Jeśli potrzebujesz obsługi liczby mnogiej, użyj tego:
Pierwszy
mailCount
parametr służy do decydowania, którego formatu użyć (pojedynczego lub mnogiego), pozostałe parametry to twoje podstawienia:Aby uzyskać więcej informacji, zobacz Zasoby łańcuchowe: Liczba mnoga .
źródło
Dodatkowa odpowiedź
Kiedy po raz pierwszy zobaczyłem
%1$s
i%2$d
w przyjętej odpowiedzi, nie miało to sensu. Oto trochę więcej wyjaśnień.Nazywa się je specyfikatorami formatu. W ciągu xml mają one postać
1$
,2$
i3$
. Kolejność umieszczania ich w łańcuchu zasobów nie ma znaczenia, tylko kolejność dostarczania parametrów.typ formatu : Istnieje wiele sposobów formatowania rzeczy ( patrz dokumentacja ). Oto kilka typowych:
s
strunowyd
dziesiętna liczba całkowitaf
liczba zmiennoprzecinkowaPrzykład
Utworzymy następujący sformatowany ciąg, w którym szare części są wstawiane programowo.
string.xml
MyActivity.java
Notatki
getString
ponieważ byłem w działaniu. Możesz użyć,context.getResources().getString(...)
jeśli nie jest dostępne.String.format()
sformatuje również ciąg.1$
I2$
warunki nie muszą być stosowane w tej kolejności. To znaczy,2$
może przyjść wcześniej1$
. Jest to przydatne podczas internacjonalizacji aplikacji dla języków, które używają innej kolejności słów.%1$s
wiele razy w pliku XML, jeśli chcesz go powtórzyć.%%
aby uzyskać rzeczywistą%
postać.źródło
Jeśli chcesz użyć parametru z rzeczywistego pliku strings.xml bez użycia kodu Java:
Nie działa to w przypadku plików zasobów, tzn. Zmienne należy skopiować do każdego pliku XML, który ich potrzebuje.
źródło
<!DOCTYPE... ]>
części w oddzielnym pliku i włączenia jej do wielu plików zasobów? Jakaś sztuczka, aby to osiągnąć?Szukałem tego samego i wreszcie znalazłem następujące bardzo proste rozwiązanie. Najlepsze: działa od razu po wyjęciu z pudełka.
1. zmień zasób swojego ciągu:
2. użyj podstawienia łańcucha:
c.getString(R.string.welcome_messages,name,count);
gdzie c jest kontekstem, nazwa jest zmienną łańcuchową i policz zmienną int
Musisz uwzględnić
w twoim res / strings.xml. Pracuje dla mnie. :)
źródło
xliff
tagów wokół specyfikatorów formatu? Jaką dodatkową wartość dodają, a nie tylko same używają specyfikatorów%s
i%d
?W Kotlin wystarczy ustawić wartość ciągu w następujący sposób:
Utwórz widok tekstu w swoim układzie:
Zrób to w kodzie, jeśli używasz Anko:
Może być konieczne pobranie zasobów z kontekstu aplikacji.
źródło
Jednak powinieneś także przeczytać odpowiedź Eliasa Mårtensona na liczbę mnogą w Androidzie dotyczącą „zero” . Występuje problem z interpretacją niektórych wartości, takich jak „zero”.
źródło
w res / wartości / string.xml
w kodzie java
źródło
Możesz użyć
MessageFormat
:W kodzie Java:
Poziom API 1:
https://developer.android.com/reference/java/text/MessageFormat.html
źródło
Jeśli chcesz zapisać procent (%), skopiuj go:
Jeśli piszesz po prostu
%1$d%
, otrzymasz błąd:Format string 'percent' is not a valid format string so it should not be passed to String.format
.źródło
Tak! możesz to zrobić bez pisania kodu Java / Kotlin, tylko XML, korzystając z tej małej biblioteki, którą utworzyłem, która robi to w czasie kompilacji, więc nie wpłynie to na twoją aplikację: https://github.com/LikeTheSalad/android -string-referencja
Stosowanie
Twoje sznurki:
Wygenerowany ciąg po zbudowaniu:
źródło
Bezpośrednie rozwiązanie problemu przez Kotlin:
strings.xml
kotlinActivityORFragmentFile.kt:
źródło
Użyj tego w swoim pliku łańcuchowym
I w swoim kodzie użyj odpowiednio
źródło
Wersja zaakceptowanej odpowiedzi Kotlin ...
źródło
resources.getString(int, ... args)
metody z argumentami zamiastString.format
. W tym kodzie nie ma też szczegółów kotlin, opróczval
słów kluczowych. Zobacz odpowiedź msbodw001