PAI - Portal Android Indonesia - Mengakses Sumber Daya - Setelah menyediakan sumber daya dalam aplikasi Anda (yang dibahas di Menyediakan Sumber Daya), Anda bisa menerapkannya dengan mengacu ID sumber dayanya. Semua ID sumber daya didefinisikan di kelas R
proyek Anda, yang dihasilkan oleh alat aapt
secara otomatis.
Bila aplikasi Anda telah dikompilasi, aapt
akan menghasilkan kelas R
, yang berisi
ID sumber daya untuk semua sumber daya dalam direktori res/
Anda. Untuk masing-masing tipe sumber daya, ada subkelas R
(misalnya, R.drawable
untuk semua sumber daya yang dapat digambar), dan untuk masing-masing sumber daya bertipe itu, ada satu integer statis (misalnya, R.drawable.icon
). Integer ini adalah ID sumber daya yang bisa Anda gunakan untuk mengambil sumber daya.
Walaupun kelas
R
adalah tempat menetapkan ID sumber daya, Anda tidak perlu melihat ke sana untuk menemukan ID sumber daya. ID sumber daya selalu terdiri dari :
- Tipe sumber daya: Masing-masing sumber daya dikelompokkan menjadi "tipe", misalnya
string
,drawable
, danlayout
. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat Tipe Sumber Daya. - Nama sumber daya, bisa berupa: nama file,
tidak termasuk ekstensi; atau nilai dalam atribut
android:name
XML, jika sumber daya itu sebuah nilai sederhana (misalnya sebuah string).
- Dalam kode: Menggunakan integer statis dari subkelas dari kelas
R
, misalnya:R.string.hello
string
adalah tipe sumber daya danhello
adalah nama sumber daya. Ada banyak Android API yang bisa mengakses sumber daya Anda bila Anda menyediakan ID sumber daya dengan format ini. Lihat Mengakses Sumber Daya dalam Kode. - Dalam XML: Menggunakan sebuah sintaks XML khusus yang juga berkaitan dengan
ID sumber daya yang didefinisikan dalam kelas
R
, misalnya:@string/hello
string
adalah tipe sumber daya danhello
adalah nama sumber daya. Anda bisa menggunakan sintaks ini dalam sumber daya XML di mana saja Anda ingin menyediakan sebuah nilai dalam sebuah sumber daya. Lihat Mengakses Sumber Daya dari XML.
Mengakses Sumber Daya dalam Kode
Anda bisa menggunakan sumber daya dalam kode dengan menyalurkan ID sumber daya sebagai sebuah parameter metode. Misalnya, Anda bisa menyetelImageView
agar menggunakan sumber daya res/drawable/myimage.png
dengan menggunakan setImageResource()
:
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
Anda juga bisa mengambil tiap sumber daya dengan menggunakan berbagai metode di Resources
, di mana Anda bisa mendapatkan instance
dengan getResources()
.
Akses ke File Asli
Walaupun tidak lazim, Anda mungkin perlu mengakses file dan direktori asli. Jika demikian, maka menyimpan file Anda dires/
tidak akan berhasil, karena satu-satunya cara untuk membaca sumber daya dari
res/
adalah dengan ID sumber daya. Sebagai gantinya, Anda bisa menyimpan sumber daya dalam direktori
assets/
.File yang disimpan di direktori
assets/
tidak diberi ID sumber daya, sehingga Anda tidak bisa mereferensikannya melalui kelas R
atau dari sumber daya XML. Sebagai gantinya, Anda bisa melakukan
kueri file di direktori assets/
seperti sebuah sistem file biasa dan membaca data mentah dengan menggunakan
AssetManager
.Akan tetapi, jika yang Anda butuhkan hanya kemampuan membaca data mentah (misalnya sebuah file video atau audio), maka simpanlah file itu di direktori
res/raw/
dan baca aliran byte dengan menggunakan openRawResource()
.
Sintaks
Inilah sintaks untuk mengacu sumber daya dalam kode :[<package_name>.]R.<resource_type>.<resource_name>
<package_name>
adalah nama paket yang di dalamnya terdapat sumber daya (tidak dibutuhkan bila mereferensikan sumber daya dari paket Anda sendiri).<resource_type>
adalah subkelasR
untuk tipe sumber daya.<resource_name>
bisa berupa nama file sumber daya tanpa ekstensi atau nilai atributandroid:name
dalam elemen XML (untuk nilai sederhana).
Kasus penggunaan
Ada banyak metode yang menerima parameter ID sumber daya dan Anda bisa mengambil sumber daya dengan menggunakan metode diResources
. Anda bisa mengambil instance Resources
dengan Context.getResources()
.Berikut adalah beberapa contoh cara mengakses sumber daya dalam kode :
// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));
// Load a custom layout for the current screen
setContentView(R.layout.main_screen);
// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
Perhatian : Anda tidak boleh memodifikasi file R.java secara manual—, ini dihasilkan oleh alat aapt bila proyek Anda telah dikompilasi. Perubahan apa pun akan ditimpa bila nanti Anda mengompilasi.
Mengakses Sumber Daya dari XML
Anda bisa mendefinisikan nilai untuk beberapa atribut dan elemen XML dengan menggunakan acuan ke sumber daya yang ada. Anda akan sering melakukannya saat membuat file layout, untuk memasok string dan gambar bagi widget Anda.Misalnya, jika Anda menambahkan sebuah Button ke layout, Anda harus menggunakan sebuah sumber daya string bagi teks tombolnya :
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/submit" />
Sintaks
Berikut adalah sintaks untuk mengacu sumber daya di sumber daya XML :@[<package_name>:]<resource_type>/<resource_name>
<package_name>
adalah nama paket yang di dalamnya terdapat sumber daya (tidak dibutuhkan bila mereferensikan sumber daya dari paket yang sama)<resource_type>
adalah subkelasR
untuk tipe sumber daya<resource_name>
bisa berupa nama file sumber daya tanpa ekstensi atau nilai atributandroid:name
dalam elemen XML (untuk nilai sederhana).
Kasus penggunaan
Dalam beberapa kasus, Anda harus menggunakan sumber daya untuk suatu nilai dalam XML (misalnya, untuk menerapkan gambar yang dapat digambar pada widget), namun Anda juga bisa menggunakan sumber daya di XML mana saja yang menerima nilai sederhana. Misalnya, jika Anda mempunyai file sumber daya berikut yang berisi sumber daya warna dan sumber daya string :<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="opaque_red">#f00</color>
<string name="hello">Hello!</string>
</resources>
Anda bisa menggunakan sumber daya ini dalam file layout berikut untuk mengatur warna teks dan string teks :
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello" />
Dalam hal ini, Anda tidak perlu menyebutkan nama paket dalam sumber daya acuan karena sumber daya berasal dari paket Anda sendiri. Untuk mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya :
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/secondary_text_dark"
android:text="@string/hello" />
Catatan : Anda harus menggunakan sumber daya string sepanjang waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain. Untuk informasi tentang cara menciptakan sumber daya alternatif (seperti string lokal), lihat Menyediakan Sumber Daya Alternatif. Untuk panduan lengkap melokalkan aplikasi Anda ke bahasa lain, lihat Pelokalan.Anda bahkan bisa menggunakan sumber daya dalam XML untuk membuat alias. Misalnya, Anda bisa membuat sumber daya dapat digambar yang merupakan alias bagi sumber daya dapat digambar lainnya :
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/other_drawable" />
Hal ini terdengar berlebihan, namun bisa sangat berguna saat menggunakan sumber daya alternatif. Baca selengkapnya tentang Membuat sumber daya alias.
Mengacu atribut gaya
Sumber daya atribut gaya memungkinkan Anda mengacu nilai suatu atribut dalam tema yang diterapkan saat ini. Dengan mengacu sebuah atribut gaya memungkinkan Anda menyesuaikan tampilan elemen UI dengan menata gayanya agar cocok dengan beragam variasi standar yang dipasok oleh tema saat ini, sebagai ganti memasok nilai yang ditanamkan (hard-coded). Mengacu sebuah atribut gaya pada dasarnya adalah "gunakan gaya yang didefinisikan oleh atribut ini, dalam tema saat ini".Untuk mereferensikan sebuah atribut gaya, sintaks namanya hampir sama dengan format sumber daya normal, namun sebagai ganti simbol (@), gunakan sebuah tanda tanya (?), dan bagian tipe sumber daya bersifat opsional. Sebagai contoh:
?[<package_name>:][<resource_type>/]<resource_name>
Misalnya, begini cara Anda mengacu suatu atribut untuk mengatur warna teks agar cocok dengan warna teks "utama" tema sistem :
<EditText id="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/hello_world" />
Di sini, atribut android:textColor
menetapkan nama atribut gaya dalam tema saat ini. Android kini menggunakan nilai yang diterapkan pada atribut gaya android:textColorSecondary
sebagai nilai untuk android:textColor
dalam widget ini. Karena alat sumber daya mengetahui bahwa atribut sumber daya diharapkan dalam konteks ini, maka Anda tidak perlu menyatakan tipenya secara eksplisit (yang akan berupa ?android:attr/textColorSecondary
)—Anda bisa mengecualikan tipe attr
.
Mengakses Sumber Daya Platform
Android berisi sejumlah sumber daya standar, seperti gaya, tema, dan layout. Untuk mengakses semua sumber daya ini, tetapkan acuan sumber daya Anda dengan nama paketandroid
. Misalnya, Android menyediakan sumber daya layout yang bisa Anda gunakan untuk item daftar dalamListAdapter
:
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
Dalam contoh ini, simple_list_item_1
adalah sumber daya layout yang didefinisikan oleh
platform untuk item di ListView
. Anda bisa menggunakannya sebagai ganti menciptakan layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan developer Tampilan Daftar.