J'utilise DataBinding
Api pour définir les vues dans les mises en page Android. Voici ma mise en page.
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>
Je veux que TextView affiche Hello UserName . Comment y parvenir en utilisant l'API de liaison de données.
android
android-layout
data-binding
android-databinding
Sasank Sunkavalli
la source
la source
@{
Bonjour `+ user.firstName}`C'est déjà répondu par @GeorgeMount dans les commentaires de l'une des solutions. Ce qui me semble être la meilleure solution à ce jour ici.
android:text="@{@string/location(user.city,user.state)}"
dans votre strings.xml
<string name="location">%1$s, %2$s</string>
la source
De nombreuses façons de concater des chaînes
1. Utilisation de la ressource de chaîne (le plus préférable en raison de la localisation )
android:text= "@{@string/generic_name(user.name)}"
Créez simplement une chaîne de caractères comme celle-ci.
<string name="generic_name">Hello %s</string>
2. Concat codé en dur
android:text="@{`Hello ` + user.name}"/>
3. Utilisation de
String
la méthode concat deandroid:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Voici
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)<string name="space">\u0020</string>
4. Utilisation
String.format()
android:text= "@{String.format(@string/Hello, user.name)}"
vous devez importer la classe String dans la mise en page dans ce type.
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <import type="String" /> </data> <TextView android:text= "@{String.format(@string/Hello, user.name)}" ... > </TextView> </layout>
5. Une autre méthode
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Dans ce cas, mettez une ressource chaîne dans
strings.xml
<string name="generic_name">%1$s, %2$s</string>
Il peut y avoir de nombreuses autres façons, choisissez celle dont vous avez besoin.
la source
Étant donné que xml prend en charge les guillemets simples pour les valeurs d'attribut, vous pouvez également le faire:
android:text='@{"Hello "+user.firstName}'
la source
Il y a deux manières.
Première solution
concat avec un accent grave (`)
android:text="@{`Hello ` + user.firstName}"/>
Deuxième solution
Déclarez votre chaîne dans
strings.xml
comme
"Hello %1$s , (whatever you want to add then add here)"
.utilisation amd
String.format(stringResource, upsatename);
la source
android:text="@{@string/hello(user.firstName)}"
En cas de chaîne statique et autre dynamique, vous pouvez utiliser ceci
android:text="@{`Hello ` + user.firstName}"/>
En cas de données dynamiques, vous pouvez l'utiliser.
android:text='@{user.firstName+" "+user.lastName}'
la source
Pour faire un concat dans une mise en page XML:
<data> /*This is used for android view*/ <import type="android.view.View" /> /*This is used for android resources*/ <import type="com.myapp.R" /> /*This is app context*/ <variable name="context" type="android.content.Context" /> /*This is used for model data*/ <variable name="item" type="com.myapp.models.Chapter" /> </data> android:text="@{item.serialNo.concat(@string/space).concat(item.title)}"
Dans strings.xml, j'ai ajouté du code pour l'espace vide:
<string name="space">\u0020</string>
la source
si vous souhaitez concaténer la
String
ressource avec les données de votre modèle, vous pouvez le faire de la manière suivante:android:text='@{@string/release_date+model.release_date}'
la source
La manière la plus simple que j'ai trouvée est de remplacer «» (simple) à la place de «» (double), par exemple. Vous avez deux variables,
<variable name="a" type="String" /> <variable name="b" type="String" />
Maintenant pour concaténer,
android:text='a + " " + b}'
la source