Saya memiliki TextView yang memiliki string hardcode dan saya memiliki variabel dinamis yang ingin saya tempatkan di akhir string ini. Ini kode saya:
<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>
Saya mengalami masalah dengan android:text="@string/Generic_Text"+"@{ Profile.name }"
. The Generic_Text
negara "Nama saya adalah" maka Profile.name
adalah dinamis dan jelas perubahan dari profil ke profil. Saya menginginkannya sehingga seluruh output TextView adalah My Name is {Profile.name} . Bantuan apa pun akan sangat bagus.
android
android-databinding
Ignacio Perez
sumber
sumber
Jawaban:
Kamu bisa melakukan ini:
jika Anda menggunakan pemformatan string untuk
Generic_Text
string Anda . ex.%s
pada akhirnyasumber
Anda dapat melakukan ini dengan lebih sederhana:
Anda string harus seperti ini:
Edit:
Tentu saja Anda dapat menggunakan variabel sebanyak yang Anda butuhkan:
Ini berfungsi hanya karena dirancang dalam pengikatan data. Selengkapnya di dokumen: https://developer.android.com/topic/libraries/data-binding/expressions#resources
sumber
My Name is null
jika data belum siap (mis. tidak dimuat dari jaringan)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Banyak cara untuk menggabungkan string
1. Menggunakan sumber daya string ( Disarankan karena Lokalisasi )
android:text= "@{@string/generic_name(user.name)}"
Buat saja sumber daya string seperti ini.
2. Concat kode keras
Ini berguna ketika Anda membutuhkan penambahan hardcode seperti + untuk nomor telepon.
3. Menggunakan
String
metode concatBerikut
space
adalah entitas html yang ditempatkan di dalamnyastrings.xml
. KarenaXML
tidak menerima entitas Html atau karakter khusus secara langsung. (Tautkan Entitas Html)4. Menggunakan
String.format()
Anda harus mengimpor kelas String dalam tata letak dalam tipe ini.
5. menggabungkan dua string dengan sumber daya string.
Dalam hal ini, masukkan sumber daya string
strings.xml
Ada banyak cara lain, pilih salah satu yang Anda butuhkan.
sumber
Gunakan Adaptor Binding .
Contoh ini ditulis di Kotlin dan memperhitungkan bahwa variabel terikat bisa jadi null:
lalu gunakan adaptor binding di XML Anda, bukan di
android:text
propertisumber
String
kelas darixml
, solusi ini hanya bagus untuk digunakan untuk manipulasi String lanjutan berdasarkan kebutuhan Anda. Namun, itu tidak salah.Pembaruan 2019, Android studio ke 3.4, Android Gradle Plugin ke 3.4
Tidak perlu lagi mengimpor
untuk operasi string. Silakan periksa jawaban ini .
sumber
Jika Anda tidak dapat mengubah string sumber daya menjadi berisi
%s
di akhir (misalnya karena digunakan di tempat lain tanpa sufiks):Jika
Profile.name
tidak bisa nol, itu sudah cukup. Namun, jikanull
terjadi, itu akan macet. Anda harus menambahkan lapisan lain:(yang membutuhkan
<import type="java.util.Objects"/>
kerja.)Sekali lagi: semua pekerjaan tambahan ini sepadan hanya jika Anda memiliki string sumber daya yang digunakan di tempat lain. Alasan kedua adalah ketika Anda ingin menangani
null
sebagai "string kosong", bukan literal "null".sumber
Jika Anda ingin mengetik teks dalam XML, Anda dapat menggunakan `` kutipan.
di tempat lain Anda perlu Concat dengan String atau variabel , Anda dapat menggunakan
jika Anda ingin menggabungkan sumber daya string daripada variabel yang bisa Anda lakukan,
sumber
Hanya menggunakan
+
operator berfungsi untuk saya:String.xml akan menjadi:
sumber