Saya memiliki array string di mana %
simbol digunakan. Format yang tepat untuk menggunakan %
is %
. Ketika saya memiliki string dalam array dengan banyak %
itu memberi saya kesalahan ini.
Multiple annotations found at this
line:
- error: Multiple substitutions specified in non-positional format;
did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
Jawaban:
Perangkat Pengemasan Aset Android (
aapt
) telah menjadi sangat ketat dalam rilis terbarunya dan sekarang digunakan untuk semua versi Android. Kesalahan aapt yang Anda dapatkan dihasilkan karena tidak lagi memungkinkan penspesifikasi format non-posisional .Berikut adalah beberapa ide bagaimana Anda dapat memasukkan% -simbol dalam string sumber daya Anda.
Jika Anda tidak memerlukan penentu format atau pengganti dalam string, Anda cukup menggunakan
formatted
atribut dan mengaturnya menjadifalse
:Dalam hal ini string tidak digunakan sebagai string format untuk
Formatter
sehingga Anda tidak perlu melarikan diri% -simbol Anda. String yang dihasilkan adalah "% a +% a == 2% a".Jika Anda menghilangkan
formatted="false"
atribut, string digunakan sebagai string format dan Anda harus melarikan diri dari% -simbol. Ini dilakukan dengan benar dengan double-%:Sekarang
aapt
memberi Anda tidak ada kesalahan tetapi tergantung pada bagaimana Anda menggunakannya, string yang dihasilkan bisa menjadi "%% a + %% a == 2 %% a" jika aFormatter
dipanggil tanpa argumen format apa pun :Tanpa xml dan kode apa pun, sulit untuk mengatakan apa sebenarnya masalah Anda, tetapi mudah-mudahan ini membantu Anda memahami mekanisme sedikit lebih baik.
sumber
Untuk mengizinkan aplikasi menggunakan string yang diformat dari sumber daya, Anda harus memperbaiki xml Anda. Jadi misalnya
harus diganti dengan
Anda dapat melihat ini untuk detailnya.
sumber
%1$s
,%2$s
dll.Anda dapat melarikan diri% menggunakan %% untuk parser XML, tetapi ditampilkan dua kali di perangkat.
Untuk menampilkannya sekali, coba format berikut:
\%%
Sebagai contoh
ditampilkan
Fat Burning (50% to 60%)
di perangkatsumber
Menggunakan
<string name="win_percentage">%d%% wins</string>
mendapatkan
80% wins
sebagai string yang diformat.Saya menggunakan
String.format()
metode untuk memasukkan nomor%d
.sumber
Dalam file strings.xml Anda, Anda dapat menggunakan tanda Unicode yang Anda inginkan.
Misalnya, nomor Unicode untuk tanda persen adalah 0025:
Anda dapat melihat daftar lengkap tanda Unicode di sini
sumber
%
karakter kembali. Saya khawatir ini tidak menyelesaikan masalah.untuk keluar dari simbol persen, Anda hanya perlu %%
sebagai contoh :
mengembalikan "10%"
sumber
10%
tidak%10
. FIY: Ketika Anda menggunakan,String.format
Anda harus setiap kali menentukan Lokal. Anda dapat benar-benar terkejut ketika Anda tidak menempatkan Lokal dan menggunakan bahasa Arab untuk nomor format ...Bukan masalah Anda melainkan masalah serupa.
Jika Anda memiliki lebih dari satu pemformatan di entri string Anda, Anda tidak boleh menggunakan "% s" beberapa kali.
JANGAN LAKUKAN:
LAKUKAN:
sumber
Anda dapat keluar dari% dalam xml dengan %%, tetapi Anda perlu mengatur teks dalam kode, bukan dalam tata letak xml.
sumber
Ini bisa menjadi kasus IDE menjadi terlalu ketat.
Idenya bagus, secara umum Anda harus menentukan urutan variabel substitusi sehingga jika Anda menambahkan sumber daya untuk bahasa lain, kode java Anda tidak perlu diubah. Namun ada dua masalah dengan ini:
Pertama, string seperti:
untuk digunakan karena Anda akan membutuhkan 2,1200 mg akan memiliki urutan yang sama dalam bahasa apa pun karena jumlah massa selalu ditampilkan dalam urutan itu secara ilmiah.
Yang kedua adalah bahwa jika Anda menempatkan urutan variabel dalam bahasa apa pun sumber daya default Anda ditentukan dalam (misalnya bahasa Inggris) maka Anda hanya perlu menentukan posisi dalam rangkaian sumber daya untuk bahasa, gunakan urutan berbeda dengan bahasa default Anda.
Berita baiknya adalah ini mudah diperbaiki. Meskipun tidak perlu menentukan posisi, dan IDE terlalu ketat, cukup tentukan saja. Untuk contoh di atas gunakan:
sumber
Metode rumit: menggunakan tanda persen kecil seperti di bawah ini
Tanda Persen di Wikipedia
sumber
Coba yang ini (kanan):
sumber
Per dokumentasi resmi Google, gunakan% 1 $ s dan% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Halo,% 1 $ s! Anda memiliki% 2 $ d pesan baru.
sumber
Misalkan Anda ingin menampilkan (50% OFF) dan masukkan 50 pada saat runtime. Ini kodenya:
Di kelas java gunakan kode ini:
sumber
Coba gunakan backslash di depannya, seperti di bawah ini:
sumber