Detail ID Sumber Daya Android
Kami biasanya menggunakan metode FindViewById untuk mendapatkan sumber daya. Misalnya, kita sering menggunakan pernyataan seperti itu dalam metode onCreate:
btnchecked = (imageview) findViewById (r.id.imgcheck);
FindViewById adalah cara yang nyaman bagi kami untuk mendapatkan berbagai objek tampilan dalam tata letak seperti tombol, label, ListView, dan Imageview. Seperti namanya, itu membutuhkan parameter int: ID sumber daya.
ID sumber daya sangat berguna. Android secara otomatis menetapkan ID ke setiap sumber daya yang terletak di direktori RES, termasuk berbagai file gambar dan objek "@+ID" dalam teks XML. Subdirektori res hampir selalu diperbaiki, seperti yang dapat Anda lihat setiap kali: Drawable-xxxx, tata letak, nilai, dan tidak umum: anim, xml, baris, warna.
Buku teks android memberi tahu Anda:
Res/ Drawable/ digunakan untuk menyimpan file gambar;
res/ tata letak/ digunakan untuk menyimpan file definisi tata letak;
Res/ nilai/ digunakan untuk menyimpan beberapa variabel, parameter, dan file lainnya.
Hanya ini yang sudah kita ketahui. Selain itu, Android akan menetapkan ID untuk semua sumber daya di direktori res, dan prinsip -prinsip alokasi utamanya adalah:
File gambar di Drawable selalu menjadi satu ID sumber daya per file.
Setiap tampilan dalam file XML yang menggunakan android: id = ”@+id/xxx” akan diberikan ID sumber daya yang tidak digunakan.
Mungkin semua orang akan menambahkan beberapa aturan lain yang lebih kompleks.
Di API ADK, ada banyak metode yang benar -benar menggunakan ID sumber daya sebagai parameter.
Misalnya, metode getDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk));
Secara harfiah, metode GetResources mengembalikan objek Android.content.res.Resources.
Metode GetDrawalbe mengembalikan objek yang dapat ditarik, kita tahu bahwa ini adalah gambar.
Parameter yang digunakan oleh metode GetDrawable adalah ID sumber daya.
Namun, angka berapa ID sumber daya int ini? Atau di mana mereka semua ditempatkan. Jika Anda cukup berhati -hati, Anda dapat menemukannya di file r.java di direktori gen. Setiap ID integer heksadesimal memiliki nama atribut yang sangat oo, mereka semua final statis publik, dan disarankan agar Anda tidak memodifikasinya secara manual. ID sumber daya ini terletak di hierarki kelas yang berbeda. Jika Anda melihat dengan cermat, Anda akan menemukan beberapa aturan. Misalnya, ID sumber daya di kelas yang dapat ditarik sebenarnya mewakili file gambar di direktori RES/Drawable; ID sumber daya yang terkandung dalam kelas tata letak sebenarnya mewakili file XML di direktori RES/Layout; ID sumber daya yang terkandung dalam kelas ID sebenarnya mewakili objek widget menggunakan android: id = "@+id/xxx" dalam file tata letak XML - tentu saja, jika Anda menggunakan "@+ban/xxx", kelas yang disebut ban akan dibuat di r.java saat dikompilasi.
Melalui pemahaman di atas, kami menemukan bahwa ID sumber daya adalah variabel atau properti yang dimulai dengan "R." - Karena semuanya didefinisikan dalam kelas R - kelas ini tidak sama dengan Android.r, dan mereka tidak berada di level paket yang sama. Yang pertama mendefinisikan sumber daya dari kerangka Android, seperti: android.r.layout.simple_expandable_list_item_1, android.r.layout.simple_expandable_list_item_2. Sudahkah Anda menggunakan sumber daya ini? Jika Anda punya waktu, Anda mungkin juga mencobanya. R lainnya adalah R kita sendiri, yang mendefinisikan ID sumber daya kita sendiri. Kita dapat menggunakan ID sumber daya dalam r.xxx.yyy yang berorientasi objek, dan tentu saja kita dapat menggunakannya secara langsung dengan angka heksadesimal.
ID sumber daya sangat penting di Android, sehingga kami bisa mendapatkan sumber daya selama kami mendapatkan ID sumber daya. Karena dalam beberapa kasus, kami tidak dapat menggunakan konstanta sebagai ID sumber daya (karena kami ingin menggantinya dengan variabel), kami hanya dapat secara dinamis mendapatkan ID sumber daya dalam dua cara:
1. Refleksi
Refleksi Java sangat kuat sehingga kita selalu memikirkannya ketika kita putus asa. Mari kita lihat sepotong kode:
coba {bidang bidang = r.drawable.class.getfield (type); int i = field.getint (new r.drawable ()); Log.d (tag, i+""); return i;} catch (Exception e) {log.e (tag, e.tostring ()); return r.drawable.unknow;}Jenis adalah variabel, dan nilainya yang mungkin akan "tutup", "edit", "ikon", dll. Kami menggunakan bidang kelas refleksi Java untuk mengakses bidang di bawah kelas R.Drawable. Bahkan, kita tahu bahwa bidang di bawah R.Drawable adalah ID sumber daya dari file gambar di direktori res.drawable-xxxx. Oleh karena itu, menjalankan kode di atas sebenarnya adalah untuk mendapatkan ID sumber daya dari file gambar yang sesuai melalui string. Misalnya, ketika nilai tipe adalah "ikon", kode di atas akan mendapatkan ID sumber daya dari file gambar ICON.PNG di direktori res.drawable-xxxx dan mengembalikannya kepada kami. Wajar bagi kita untuk menampilkan gambar di Imageview melalui ID sumber daya.
2. Gunakan metode GetIdentifier dari kelas sumber daya
Menggunakan refleksi masih merepotkan. Jika Anda menggunakan kelas android.content.res.Resources untuk melakukan hal yang sama, itu hanya dua kalimat:
Resources res = getResources (); return res.getIdentifier (type, "drawable", getPackagename ());
Metode GetResources berasal dari ContextXt (yaitu, kelas aktivitas), yang dapat secara langsung mengembalikan objek sumber daya. Metode sumber daya GETIdentifier dapat mengembalikan ID sumber daya apa pun di R.Java. Tentu saja, Anda harus menentukan 3 parameter: nama bidang, nama kelas, dan nama paket. Bagian nama paket dari nama yang sepenuhnya memenuhi syarat yang ditentukan oleh nama paket. Jika nama R yang sepenuhnya memenuhi syarat adalah Android.r atau com.r. GetPackAgename sebenarnya adalah this.getPackagename (), yang secara langsung mengembalikan nama paket kelas ini.
Nama kelas adalah kelas tempat sumber daya itu berada. Misalnya, seperti yang kita ketahui, beberapa kelas tetap di kelas R.Java: Drawable, ID, String, Layout, dll., Dan banyak ID sumber daya didefinisikan di bawahnya.
Nama bidang adalah nama ID sumber daya. Misalnya, definisi ID sumber daya:
final statis public int del = 0x7f020002;
Del adalah nama ID sumber daya, dan 0x7f020002 adalah nilai heksadesimalnya.
Dengan 3 parameter, metode GETIdentifier dapat memperoleh ID sumber daya dengan membandingkan metode dinamis.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!