J'ai un TextView qui a une chaîne codée en dur et j'ai une variable dynamique que je veux mettre à la fin de cette chaîne. Voici mon code:
<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>
J'ai un problème avec android:text="@string/Generic_Text"+"@{ Profile.name }"
. Les Generic_Text
états "Mon nom est" alors le Profile.name
est dynamique et change évidemment de profil en profil. Je le veux pour que toute la sortie TextView soit Mon nom est {Profile.name} . Toute aide est la bienvenue.
android
android-databinding
Ignacio Perez
la source
la source
Réponses:
Tu peux le faire:
si vous utilisez une mise en forme de chaîne pour votre
Generic_Text
chaîne. ex.%s
à la finla source
Vous pouvez le faire encore plus simplement:
votre chaîne devrait être comme ceci:
Éditer:
Bien sûr, vous pouvez utiliser autant de variables que nécessaire:
Cela fonctionne simplement parce qu'il est conçu dans la liaison de données. Plus dans la documentation: https://developer.android.com/topic/libraries/data-binding/expressions#resources
la source
My Name is null
si les données ne sont pas encore prêtes (par exemple, n'ont pas été chargées à partir du réseau)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
De nombreuses façons de concaténer des chaînes
1. Utilisation de la ressource de chaîne ( recommandé parce que la localisation )
android:text= "@{@string/generic_name(user.name)}"
Créez simplement une chaîne de caractères comme celle-ci.
2. Concat codé en dur
Ceci est utile lorsque vous avez besoin d'un ajout codé en dur comme + pour le numéro de téléphone.
3. Utilisation de
String
la méthode concat deVoici
space
une entité html qui est placée à l'intérieurstrings.xml
. CarXML
n'accepte pas directement les entités Html ou les caractères spéciaux. (Lier les entités HTML)4. Utilisation
String.format()
vous devez importer la classe String dans la mise en page dans ce type.
5. concattez deux chaînes par ressource de chaîne.
Dans ce cas, mettez une ressource chaîne dans
strings.xml
Il peut y avoir de nombreuses autres façons, choisissez celle dont vous avez besoin.
la source
Utiliser un adaptateur de liaison .
Cet exemple est écrit en Kotlin et prend en compte le fait que la variable liée peut être nulle:
puis utilisez l'adaptateur de liaison dans votre XML au lieu de la
android:text
propriétéla source
String
classe dexml
, cette solution ne peut être utilisée que pour les manipulations de chaînes avancées en fonction de vos besoins. Cependant, ce n'est pas incorrect.Mise à jour 2019, Android Studio vers 3.4, Android Gradle Plugin vers 3.4
Plus besoin d'importer
pour les opérations de chaîne. Veuillez vérifier cette réponse .
la source
Dans le cas où vous ne pouvez pas modifier la chaîne de ressources pour qu'elle contienne
%s
à la fin (par exemple parce qu'elle est utilisée ailleurs sans le suffixe):Si
Profile.name
ne peut pas être nul, cela suffit. Cependant, si unnull
se produit, il plantera. Vous devez ajouter un autre calque:(ce qui nécessite
<import type="java.util.Objects"/>
de travailler.)Encore une fois: tout ce travail supplémentaire ne vaut la peine que si vous avez la chaîne de ressources utilisée ailleurs. La deuxième raison est lorsque vous souhaitez traiter
null
comme "chaîne vide" au lieu d'un littéral "nul".la source
Si vous souhaitez taper du texte en XML, vous pouvez utiliser `` quotation.
ailleurs, vous devez concaténer avec la chaîne ou la variable , vous pouvez utiliser
si vous souhaitez concaténer la ressource de chaîne au lieu de la variable que vous pouvez faire,
la source
Le simple fait d'utiliser un
+
opérateur fonctionne pour moi:String.xml sera:
la source