Saya ingin memiliki 2 bahasa untuk UI dan nilai string terpisah untuk mereka dalam file sumber saya res\values\strings.xml
:
<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>
<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>
Sekarang saya perlu mengambil nilai-nilai ini secara dinamis di aplikasi saya:
spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);
Masalah saya adalah itu i = 0
.
Mengapa itu tidak berhasil dalam kasus saya?
en
atauru
?Jawaban:
Tautan yang Anda maksud tampaknya berfungsi dengan string yang dihasilkan saat runtime. String dari strings.xml tidak dibuat saat runtime. Anda bisa mendapatkannya melalui
getResources()
adalah metodeContext
kelas. Jika Anda berada di dalam aActivity
atauService
(yang memperluas Konteks) Anda dapat menggunakannya seperti dalam cuplikan ini.Juga perhatikan bahwa seluruh ketergantungan bahasa dapat diatasi oleh kerangka kerja android . Cukup buat folder yang berbeda untuk setiap bahasa. Jika bahasa Inggris adalah bahasa default Anda, cukup masukkan string bahasa Inggris ke dalamnya
res/values/strings.xml
. Kemudian buat folder baruvalues-ru
dan masukkan string Rusia dengan nama yang identik ke dalamres/values-ru/strings.xml
. Dari titik ini pada android memilih yang benar tergantung pada lokasi perangkat untuk Anda, baik ketika Anda menelepongetString()
atau ketika mereferensikan string dalam XML via@string/mystring
. Yang darires/values/strings.xml
adalah yang mundur, jika Anda tidak memiliki folder yang mencakup lokal pengguna, yang ini akan digunakan sebagai nilai default.Lihat Pelokalan dan Sumber Daya Penyedia untuk informasi lebih lanjut.
sumber
android.support.v4.app.Fragment
, Anda bisagetString(R.string.mystring)
langsung menelepon .Saya memiliki masalah yang sama. Tetapi kode di bawah ini berfungsi untuk saya: Verifikasi apakah nama paket Anda benar. Anda harus merujuk untuk paket root aplikasi Android Anda.
sumber
string
dan tidakstrings
. Karena itu logis (seperti Android lainnya). Jadi, terima kasih untuk itu (dan banyak lagi), @levian. :-)String someStringFromXML = getString(getResources().getIdentifier("some_string_name", "string", getPackageName()));
.Bukan hanya dari kegiatan:
sumber
sumber
Saya akan menambahkan sesuatu ke solusi leonvian, jadi jika kebetulan string tidak ditemukan di antara sumber daya (nilai pengembalian 0, itu bukan kode sumber daya yang valid), fungsi mungkin mengembalikan sesuatu:
sumber
Pendekatan Terbaik
App.getRes().getString(R.string.some_id)
Akan bekerja di mana saja (Utils, Model juga).
Saya telah membaca semua jawaban, semua jawaban dapat membuat pekerjaan Anda selesai.
getString(R.string.some_string_id)
keduanyaActivity
atauFragment
.Context.getString(R.string.some_string_id)
mana Anda tidak memiliki akses langsung kegetString()
metode. SepertiDialog
.Masalah
Ketika Anda tidak memiliki
Context
akses , sukai metode diUtil
kelas Anda .Asumsikan metode di bawah ini tanpa Konteks.
Sekarang Anda akan lulus
Context
sebagai parameter dalam metode ini dan gunakangetString().
Apa yang saya lakukan adalah
Apa? Sangat mudah digunakan di mana saja di aplikasi Anda!
Jadi, inilah solusi yang dapat digunakan untuk mengakses sumber daya dari mana saja
Util class
.Tambahkan bidang nama ke
manifest.xml
<application
tag Anda .Sekarang kamu baik untuk pergi. Gunakan
App.getAppResources().getString(R.string.some_id)
di mana saja di aplikasi.sumber
getResourses
,getResources
penyebabnya akan ditimpa. Juga pola singleton tampaknya tidak perlu, mungkin bisa dilewati. Adakah memori yang bocor masalah dengan solusi ini?Cara yang lebih mudah adalah dengan menggunakan
getString()
fungsi dalam aktivitas.Referensi: http://developer.android.com/guide/topics/resources/string-resource.html
Saya pikir fitur ini ditambahkan dalam versi Android terbaru, siapa pun yang mengetahui sejarah dapat mengomentari ini.
sumber
Cara sederhana untuk mendapatkan string sumber daya dari string ke TextView. Di sini resourceName adalah nama resource
sumber
Jika Anda tidak memiliki referensi Aktivitas, Anda dapat menggunakan konteks Anda dengan cara ini:
sumber
Ada juga satu set string Android yang telah ditentukan sebelumnya seperti "Oke", "Batal" dan banyak lainnya - sehingga Anda tidak perlu mendeklarasikan semua. Mereka tersedia hanya dengan:
(Dalam hal ini, string "Oke"). BTW ada juga sumber daya Android lain yang tersedia seperti misalnya ikon gambar dll.
sumber
String myString = getString (R.string.mystring);
jalan mudah
sumber
Anda dapat mencoba ini dalam suatu Kegiatan:
Dalam situasi lain seperti fragmen, ... gunakan
sumber
Untuk amannya, Anda harus menambahkan: mContext.getResources (). GetString (R.string.your_string);
mContext dapat berupa: konteks di onAttach () dari Fragmen atau ini dari Activity.
sumber
Jika Anda tidak bisa mendapatkannya di dalam suatu aktivitas atau fragmnet, maka:
Jika Anda ingin mendapatkannya dari kelas di luar aktivitas atau fragmen di mana Anda tidak memiliki konteks aktivitas kemudian gunakan konteks aplikasi:
sumber
Gunakan baris itu langsung di file java Anda. Tetap sederhana.
sumber