Apakah mungkin memiliki placeholder dalam nilai string string.xml
yang dapat diberikan nilai pada saat dijalankan?
Contoh:
beberapa string PLACEHOLDER1 beberapa string lagi
android
string
string-formatting
android-resources
ReferensiReferensi
sumber
sumber
Jawaban:
Pemformatan dan Styling
Ya, lihat berikut ini dari Sumber Daya String: Memformat dan Styling
Penggunaan Dasar
Catatan yang
getString
memiliki kelebihan yang menggunakan string sebagai string format:Bentuk jamak
Jika Anda perlu menangani bentuk jamak, gunakan ini:
mailCount
Param pertama digunakan untuk memutuskan format mana yang akan digunakan (tunggal atau jamak), params lainnya adalah substitusi Anda:Lihat Sumber Daya String: bentuk jamak untuk lebih jelasnya.
sumber
Jawaban Tambahan
Ketika saya pertama kali melihat
%1$s
dan%2$d
dalam jawaban yang diterima, itu tidak masuk akal. Ini sedikit penjelasan.Mereka disebut penentu format. Dalam string xml mereka dalam bentuk
1$
,2$
dan3$
. Urutan yang Anda tempatkan dalam string sumber daya tidak masalah, hanya urutan yang Anda berikan parameternya.tipe format : Ada banyak cara Anda dapat memformat sesuatu ( lihat dokumentasi ). Berikut ini beberapa yang umum:
s
talid
bilangan bulat desimalf
angka titik mengambangContoh
Kami akan membuat string yang diformat berikut di mana bagian abu-abu dimasukkan secara terprogram.
string.xml
MyActivity.java
Catatan
getString
karena saya sedang dalam suatu Kegiatan. Anda dapat menggunakancontext.getResources().getString(...)
jika tidak tersedia.String.format()
juga akan memformat String.1$
dan2$
istilah tidak perlu digunakan dalam urutan itu. Artinya,2$
bisa datang sebelumnya1$
. Ini berguna saat internasionalisasi aplikasi untuk bahasa yang menggunakan urutan kata yang berbeda.%1$s
beberapa kali dalam xml jika Anda ingin mengulanginya.%%
untuk mendapatkan%
karakter yang sebenarnya .sumber
Saat Anda ingin menggunakan parameter dari file strings.xml aktual tanpa menggunakan kode Java apa pun:
Ini tidak berfungsi di file sumber, yaitu variabel harus disalin ke setiap file XML yang membutuhkannya.
sumber
<!DOCTYPE... ]>
bagian dalam file terpisah dan memasukkannya ke dalam beberapa file sumber daya? Adakah trik untuk mencapai ini?Sedang mencari yang sama dan akhirnya menemukan solusi yang sangat sederhana berikut. Terbaik: ini bekerja di luar kotak.
1. ubah sumber daya string Anda:
2. gunakan substitusi string:
c.getString(R.string.welcome_messages,name,count);
di mana c adalah Konteks, nama adalah variabel string dan hitung variabel int Anda
Anda harus memasukkan
di res / strings.xml Anda. Bekerja untukku. :)
sumber
xliff
tag di sekitar penentu format? Nilai tambahan apa yang mereka tambahkan sebagai lawan dari hanya menggunakan%s
dan%d
penspesifikasi sendiri?Di Kotlin Anda hanya perlu menetapkan nilai string Anda seperti ini:
Buat tampilan teks pada tata letak Anda:
Kemudian lakukan ini dalam kode Anda jika Anda menggunakan Anko:
Anda mungkin perlu mendapatkan sumber daya dari konteks aplikasi.
sumber
Namun, Anda juga harus membaca jawaban Elias Mårtenson pada pengobatan jamak Android "nol" . Ada masalah dengan interpretasi nilai-nilai tertentu seperti "nol".
sumber
di res / values / string.xml
dalam kode java
sumber
Anda bisa menggunakan
MessageFormat
:Dalam kode Java:
API level 1:
https://developer.android.com/reference/java/text/MessageFormat.html
sumber
Jika Anda ingin menulis persen (%), duplikat:
Jika Anda menulis hanya
%1$d%
, Anda akan mendapatkan error:Format string 'percent' is not a valid format string so it should not be passed to String.format
.sumber
Iya! Anda dapat melakukannya tanpa menulis kode Java / Kotlin, hanya XML dengan menggunakan perpustakaan kecil yang saya buat ini, yang melakukannya saat buildtime, sehingga aplikasi Anda tidak akan terpengaruh olehnya: https://github.com/LikeTheSalad/android -string-referensi
Pemakaian
String Anda:
String yang dihasilkan setelah bangunan:
sumber
Solusi Kotlin Langsung untuk masalah ini:
strings.xml
kotlinActivityORFragmentFile.kt:
sumber
Dalam file string Anda gunakan ini
Dan dalam kode Anda gunakan sesuai
sumber
Versi Kotlin dari jawaban yang diterima ...
sumber
resources.getString(int, ... args)
metode dengan argumen, bukanString.format
. Tidak ada spesifikasi kotlin dalam kode ini, selainval
kata kunci. Lihat jawaban msbodw001