Mam TextView, który ma zakodowany ciąg i mam dynamiczną zmienną, którą chcę umieścić na końcu tego ciągu. To jest mój kod:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp">
<TextView
android:id="@+id/PeopleName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/Generic_Text"+"@{ Profile.name }" />
</LinearLayout>
Mam problem z android:text="@string/Generic_Text"+"@{ Profile.name }"
. Stan Generic_Text
„Moje imię to” jest wtedy Profile.name
dynamiczny i oczywiście zmienia się w zależności od profilu. Chcę, żeby całe wyjście TextView miało na imię My Name to {Profile.name} . Każda pomoc byłaby świetna.
android
android-databinding
Ignacio Perez
źródło
źródło
Odpowiedzi:
Możesz to zrobić:
jeśli używasz formatowania ciągu dla swojego
Generic_Text
ciągu. dawny.%s
na końcuźródło
Możesz to zrobić jeszcze prościej:
Twój ciąg powinien wyglądać tak:
Edytować:
Oczywiście możesz użyć tylu zmiennych, ile potrzebujesz:
Działa tylko dlatego, że jest zaprojektowany w powiązaniu danych. Więcej w dokumentach: https://developer.android.com/topic/libraries/data-binding/expressions#resources
źródło
My Name is null
czy dane nie są jeszcze gotowe (np. nie zostały załadowane z sieci)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Wiele sposobów łączenia ciągów
1. Korzystanie z zasobu ciągu ( zalecane ze względu na lokalizację )
android:text= "@{@string/generic_name(user.name)}"
Po prostu utwórz zasób ciągów w ten sposób.
2. Concat zakodowany na stałe
Jest to przydatne, gdy potrzebujesz wpisanego na stałe kodu, takiego jak + dla numeru telefonu.
3. Korzystanie
String
z metody concatOto
space
jednostka HTML, która jest umieszczona wewnątrzstrings.xml
. PonieważXML
nie akceptuje bezpośrednio jednostek HTML ani znaków specjalnych. (Połącz jednostki HTML)4. Korzystanie
String.format()
musisz zaimportować klasę String w układzie tego typu.
5. połącz dwa ciągi według zasobu ciągu.
W tym przypadku wstaw zasób ciągu
strings.xml
Istnieje wiele innych sposobów, wybierz ten, którego potrzebujesz.
źródło
Użyj łącznika do wiązania .
Ten przykład jest napisany w Kotlinie i bierze pod uwagę, że zmienna związana może mieć wartość null:
następnie użyj adaptera powiązania w kodzie XML zamiast
android:text
właściwościźródło
String
klasę fromxml
, to rozwiązanie nadaje się tylko do zaawansowanych operacji na ciągach znaków w oparciu o twoje wymagania. Jednak nie jest to błędne.Aktualizacja 2019, Android studio do wersji 3.4, wtyczka Android Gradle do wersji 3.4
Nie trzeba już importować
do operacji na strunach. Proszę sprawdzić tę odpowiedź .
źródło
W przypadku, gdy nie możesz zmienić ciągu zasobu tak, aby zawierał
%s
na końcu (np. Ponieważ jest używany w innym miejscu bez sufiksu):Jeśli
Profile.name
nie może być zerowe, to wystarczy. Jednak jeślinull
tak się stanie, ulegnie awarii. Musisz dodać kolejną warstwę:(co wymaga
<import type="java.util.Objects"/>
pracy.)Ponownie: cała ta dodatkowa praca jest tego warta tylko wtedy, gdy masz ciąg zasobów używany w innym miejscu. Drugim powodem jest sytuacja, w której chcesz traktować
null
jako „pusty łańcuch” zamiast literału „null”.źródło
W przypadku, gdy chcesz wpisać tekst w XML, możesz użyć `` cudzysłowu.
gdzie indziej musisz Concat z Stringiem lub zmienną , możesz użyć
jeśli chcesz połączyć zasób łańcuchowy zamiast zmiennej, którą możesz zrobić,
źródło
Samo użycie
+
operatora działa dla mnie:String.xml będzie:
źródło