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 le TextView affiche Hello UserName. Comment y parvenir en utilisant l’API de liaison de données.
concat int avec accent grave (`)
Android:text="@{`Hello ` + user.firstName}"/>
Vous pouvez le concaténer de plusieurs façons, vérifiez-le ici [concat-deux-chaînes-dans-textview-using-databinding
@GeorgeMount a déjà répondu à cette question dans les commentaires de l'une des solutions. Ce qui me semble être la meilleure solution jusqu'ici. S'il vous plaît lui donner un +1
Android:text="@{@string/location(user.city,user.state)}"
dans votre strings.xml
<string name="location">%1$s, %2$s</string>
Android:text= "@{@string/generic_name(user.name)}"
Faites juste une ressource de chaîne comme ceci.
<string name="generic_name">Hello %s</string>
Android:text="@{`Hello ` + user.name}"/>
String
Android:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Ici space
est une entité HTML qui est placée dans strings.xml
. Parce que XML
n'accepte pas les entités HTML ni les caractères spéciaux directement. (Lien Entités HTML)
<string name="space">\u0020</string>
String.format()
Android:text= "@{String.format(@string/Hello, user.name)}"
vous devez importer la classe String dans la présentation 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>
Android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Dans ce cas, mettez une ressource de 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.
Puisque xml prend en charge les guillemets simples pour les valeurs d'attribut, vous pouvez également le faire:
Android:text='@{"Hello "+user.firstName}'
Il y a deux façons.
première solution
concat avec 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)"
.
AMD utilise String.format(stringResource, upsatename);
Pour faire un concat en 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 les espaces:
<string name="space">\u0020</string>
si vous voulez concaténer la ressource String
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}'