Ich benutze DataBinding
Api zum Einstellen der Ansichten in Android-Layouts. Hier ist mein Layout.
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>
Ich möchte, dass in der Textansicht Hello UserName angezeigt wird . Wie dies mit der Datenbindungs-API erreicht werden kann.
android
android-layout
data-binding
android-databinding
Sasank Sunkavalli
quelle
quelle
@{
Hallo `+ user.firstName}`Dies wird bereits von @GeorgeMount in Kommentaren zu einer der Lösungen beantwortet. Was für mich hier die bisher beste Lösung ist.
android:text="@{@string/location(user.city,user.state)}"
in Ihrer strings.xml
<string name="location">%1$s, %2$s</string>
quelle
Viele Möglichkeiten, um Saiten zu konzentrieren
1. Verwenden einer Zeichenfolgenressource ( aufgrund der Lokalisierung am meisten bevorzugt )
android:text= "@{@string/generic_name(user.name)}"
Machen Sie einfach eine String-Ressource wie diese.
<string name="generic_name">Hello %s</string>
2. Hartcodierter Concat
android:text="@{`Hello ` + user.name}"/>
3. Verwenden Sie
String
die Concat-Methodeandroid:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Hier
space
ist eine HTML-Entität, die darin platziert wirdstrings.xml
. WeilXML
keine HTML-Entitäten oder Sonderzeichen direkt akzeptiert. (Link HTML Entities)<string name="space">\u0020</string>
4. Verwenden von
String.format()
android:text= "@{String.format(@string/hello, user.name)}"
Sie müssen die String-Klasse im Layout dieses Typs importieren.
<?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. Eine andere Methode
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
In diesem Fall fügen Sie eine Zeichenfolgenressource ein
strings.xml
<string name="generic_name">%1$s, %2$s</string>
Es gibt viele andere Möglichkeiten, wählen Sie eine, die Sie benötigen.
quelle
Da XML einfache Anführungszeichen für Attributwerte unterstützt, können Sie dies auch tun:
android:text='@{"Hello "+user.firstName}'
quelle
Es gibt zwei Möglichkeiten.
Erste Lösung
concat mit ernstem Akzent (`)
android:text="@{`Hello ` + user.firstName}"/>
Zweite Lösung
Deklarieren Sie Ihre Zeichenfolge in
strings.xml
wie
"Hello %1$s , (whatever you want to add then add here)"
.und verwenden
String.format(stringResource, upsatename);
quelle
android:text="@{@string/hello(user.firstName)}"
Bei statischen Zeichenfolgen und anderen dynamischen Zeichenfolgen können Sie diese verwenden
android:text="@{`Hello ` + user.firstName}"/>
Bei dynamischen Daten können Sie diese verwenden.
android:text='@{user.firstName+" "+user.lastName}'
quelle
So erstellen Sie ein Concat im XML-Layout:
<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)}"
In strings.xml habe ich Code für Leerzeichen hinzugefügt:
<string name="space">\u0020</string>
quelle
Wenn Sie
String
Ressourcen mit Daten aus Ihrem Modell verknüpfen möchten , können Sie dies folgendermaßen tun:android:text='@{@string/release_date+model.release_date}'
quelle
Der einfachste Weg, den ich gefunden habe, besteht darin, '' (einfach) anstelle von "" (doppelt) zu ersetzen, z. Sie haben zwei Variablen,
<variable name="a" type="String" /> <variable name="b" type="String" />
Nun zu verketten,
android:text='a + " " + b}'
quelle
Wahrscheinlich zu spät zur Party: Der folgende Code wird auch funktionieren
android:text='@{@string/hello.concat(user.firstName)}'
quelle