Ich habe eine Textansicht mit einer fest codierten Zeichenfolge und eine dynamische Variable, die ich am Ende dieser Zeichenfolge einfügen möchte. Das ist mein 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>
Ich habe ein Problem mit android:text="@string/Generic_Text"+"@{ Profile.name }"
. Der Generic_Text
Status "Mein Name ist" ist dann Profile.name
dynamisch und ändert sich offensichtlich von Profil zu Profil. Ich möchte, dass die gesamte TextView-Ausgabe Mein Name ist {Profilname} . Jede Hilfe wäre großartig.
android
android-databinding
Ignacio Perez
quelle
quelle
Antworten:
Du kannst das:
Wenn Sie die Zeichenfolgenformatierung für Ihre
Generic_Text
Zeichenfolge verwenden. Ex.%s
Am Endequelle
Sie können dies noch einfacher tun:
Ihre Zeichenfolge sollte folgendermaßen aussehen:
Bearbeiten:
Natürlich können Sie so viele Variablen verwenden, wie Sie benötigen:
Es funktioniert nur, weil es für die Datenbindung ausgelegt ist. Weitere Informationen finden Sie in den Dokumenten: https://developer.android.com/topic/libraries/data-binding/expressions#resources
quelle
My Name is null
wenn Daten noch nicht bereit sind (z. B. nicht aus dem Netzwerk geladen wurden)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Viele Möglichkeiten, um Saiten zu konzentrieren
1. Verwenden einer Zeichenfolgenressource ( Empfohlen wegen Lokalisierung )
android:text= "@{@string/generic_name(user.name)}"
Machen Sie einfach eine String-Ressource wie diese.
2. Hartcodierter Concat
Dies ist nützlich, wenn Sie einen fest codierten Anhang wie + für die Telefonnummer benötigen.
3. Verwenden Sie
String
die Concat-MethodeHier
space
ist eine HTML-Entität, die im Inneren platziert wirdstrings.xml
. WeilXML
keine HTML-Entitäten oder Sonderzeichen direkt akzeptiert. (Link HTML Entities)4. Verwenden von
String.format()
Sie müssen die String-Klasse im Layout dieses Typs importieren.
5. Konzentrieren Sie zwei Zeichenfolgen nach Zeichenfolgenressourcen.
In diesem Fall fügen Sie eine Zeichenfolgenressource ein
strings.xml
Es gibt viele andere Möglichkeiten, wählen Sie eine, die Sie benötigen.
quelle
Verwenden Sie einen Bindungsadapter .
Dieses Beispiel ist in Kotlin geschrieben und berücksichtigt, dass die gebundene Variable null sein kann:
Verwenden Sie dann den Bindungsadapter in Ihrem XML anstelle der
android:text
Eigenschaftquelle
String
class from bereitgestellt wirdxml
, eignet sich diese Lösung nur für erweiterte String-Manipulationen, die Ihren Anforderungen entsprechen. Es ist jedoch nicht falsch.2019 Update, Android Studio auf 3.4, Android Gradle Plugin auf 3.4
Zum Importieren nicht mehr erforderlich
für String-Operationen. Bitte überprüfen Sie diese Antwort .
quelle
Falls Sie die Ressourcenzeichenfolge am Ende nicht ändern können
%s
(z. B. weil sie ohne das Suffix an anderer Stelle verwendet wird):Wenn
Profile.name
nicht null sein kann, ist das genug. Wenn jedoch etwasnull
passiert, stürzt es ab. Sie müssen eine weitere Ebene hinzufügen:(was erfordert, um
<import type="java.util.Objects"/>
zu arbeiten.)Nochmals: All diese zusätzliche Arbeit lohnt sich nur, wenn Sie die Ressourcenzeichenfolge an anderer Stelle verwenden. Der zweite Grund ist, wenn Sie
null
als "leere Zeichenfolge" anstelle eines "Null" -Literal behandeln möchten .quelle
Wenn Sie Text in XML eingeben möchten , können Sie ein Anführungszeichen verwenden.
An anderer Stelle müssen Sie sich mit dem String oder der Variablen auseinandersetzen , die Sie verwenden können
Wenn Sie anstelle der Variablen, die Sie ausführen können, eine String-String-Ressource verwenden möchten ,
quelle
Nur
+
Operator zu verwenden funktioniert für mich:String.xml lautet:
quelle