1page.title=Mengakses Sumber Daya 2parent.title=Sumber Daya Aplikasi 3parent.link=index.html 4@jd:body 5 6<div id="qv-wrapper"> 7<div id="qv"> 8 <h2>Tampilan Cepat</h2> 9 <ul> 10 <li>Sumber daya bisa diacu dari kode dengan menggunakan integer dari {@code R.java}, seperti 11{@code R.drawable.myimage}</li> 12 <li>Sumber daya bisa diacu dari sumber daya dengan menggunakan sintaks XML khusus, seperti {@code 13@drawable/myimage}</li> 14 <li>Anda juga bisa mengakses sumber daya aplikasi Anda dengan berbagai metode di 15{@link android.content.res.Resources}</li> 16 </ul> 17 18 <h2>Kelas-Kelas Utama</h2> 19 <ol> 20 <li>{@link android.content.res.Resources}</li> 21 </ol> 22 23 <h2>Dalam dokumen ini</h2> 24 <ol> 25 <li><a href="#ResourcesFromCode">Mengakses Sumber Daya dari Kode</a></li> 26 <li><a href="#ResourcesFromXml">Mengakses Sumber Daya dari XML</a> 27 <ol> 28 <li><a href="#ReferencesToThemeAttributes">Mengacu atribut gaya</a></li> 29 </ol> 30 </li> 31 <li><a href="#PlatformResources">Mengakses Sumber Daya Platform</a></li> 32 </ol> 33 34 <h2>Lihat juga</h2> 35 <ol> 36 <li><a href="providing-resources.html">Menyediakan Sumber Daya</a></li> 37 <li><a href="available-resources.html">Tipe Sumber Daya</a></li> 38 </ol> 39</div> 40</div> 41 42 43 44 45<p>Setelah Anda menyediakan sumber daya dalam aplikasi Anda (yang dibicarakan di <a href="providing-resources.html">Menyediakan Sumber Daya</a>), Anda bisa menerapkannya dengan 46mengacu ID sumber dayanya. Semua ID sumber daya didefinisikan di kelas {@code R} proyek Anda, yang 47dihasilkan oleh alat {@code aapt} secara otomatis.</p> 48 49<p>Bila aplikasi Anda dikompilasi, {@code aapt} akan membuat kelas {@code R}, yang berisi 50ID sumber daya untuk semua sumber daya dalam direktori {@code 51res/} Anda. Untuk masing-masing tipe sumber daya, ada subkelas {@code R} (misalnya, 52{@code R.drawable} untuk semua sumber daya yang bisa ditarik), dan untuk masing-masing sumber daya dari tipe itu, ada satu integer statis 53 (misalnya, {@code R.drawable.icon}). Integer ini adalah ID sumber daya yang bisa Anda gunakan 54untuk mengambil sumber daya Anda.</p> 55 56<p>Walaupun kelas {@code R} adalah tempat menyebutkan ID sumber daya, Anda tidak perlu 57melihat ke sana untuk menemukan ID sumber daya. ID sumber daya selalu terdiri dari:</p> 58<ul> 59 <li><em>Tipe sumber daya</em>: Masing-masing sumber daya dikelompokkan menjadi "tipe", misalnya {@code 60string}, {@code drawable}, dan {@code layout}. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat <a href="available-resources.html">Tipe Sumber Daya</a>. 61 </li> 62 <li><em>Nama sumber daya</em>, bisa berupa: nama file, 63tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika 64sumber daya itu sebuah nilai sederhana (misalnya sebuah string).</li> 65</ul> 66 67<p>Ada dua cara untuk mengakses sumber daya:</p> 68<ul> 69 <li><strong>Dalam kode:</strong> Menggunakan integer statis dari subkelas dari kelas {@code R} 70, misalnya: 71 <pre class="classic no-pretty-print">R.string.hello</pre> 72 <p>{@code string} adalah tipe sumber daya dan {@code hello} adalah nama sumber daya. Ada banyak 73API Android yang bisa mengakses sumber daya Anda bila Anda menyediakan ID sumber daya dengan format ini. Lihat 74<a href="#ResourcesFromCode">Mengakses Sumber Daya dalam Kode</a>.</p> 75 </li> 76 <li><strong>Dalam XML:</strong> Menggunakan sebuah sintaks XML khusus yang juga berkaitan dengan 77ID sumber daya yang didefinisikan dalam kelas {@code R}, misalnya: 78 <pre class="classic no-pretty-print">@string/hello</pre> 79 <p>{@code string} adalah tipe sumber daya dan {@code hello} adalah nama sumber daya. Anda bisa menggunakan 80sintaks ini dalam sumber daya XML di mana saja Anda ingin menyediakan sebuah nilai dalam sebuah sumber daya. Lihat <a href="#ResourcesFromXml">Mengakses Sumber Daya dari XML</a>.</p> 81 </li> 82</ul> 83 84 85 86<h2 id="ResourcesFromCode">Mengakses Sumber Daya dalam Kode </h2> 87 88<p>Anda bisa menggunakan sumber daya dalam kode dengan menyalurkan ID sumber daya sebagai sebuah parameter metode. Misalnya, 89 Anda bisa mengatur sebuah {@link android.widget.ImageView} agar menggunakan sumber daya{@code res/drawable/myimage.png} 90dengan menggunakan {@link android.widget.ImageView#setImageResource(int) setImageResource()}:</p> 91<pre> 92ImageView imageView = (ImageView) findViewById(R.id.myimageview); 93imageView.setImageResource(<strong>R.drawable.myimage</strong>); 94</pre> 95 96<p>Anda juga bisa mengambil tiap sumber daya dengan menggunakan berbagai metode di {@link 97android.content.res.Resources}, di mana Anda bisa mendapatkan instance 98 {@link android.content.Context#getResources()}.</p> 99 100<div class="sidebox-wrapper"> 101<div class="sidebox"> 102<h2>Akses ke File Asli</h2> 103 104<p>Walaupun tidak lazim, Anda mungkin perlu mengakses file dan direktori asli Anda. Jika demikian, maka 105menyimpan file Anda di {@code res/} tidak akan berhasil, karena satu-satunya cara untuk membaca sebuah sumber daya dari 106{@code res/} adalah dengan ID sumber daya. Sebagai gantinya, Anda bisa menyimpan sumber daya dalam direktori 107{@code assets/}.</p> 108<p>File yang tersimpan di direktori {@code assets/} <em>tidak</em> diberi ID 109sumber daya, sehingga Anda tidak bisa mengacunya melalui kelas {@code R} atau dari sumber daya XML. Sebagai gantinya, Anda bisa melakukan 110query file di direktori {@code assets/} seperti sebuah sistem file biasa dan membaca data mentah dengan menggunakan 111{@link android.content.res.AssetManager}.</p> 112<p>Akan tetapi, jika yang Anda butuhkan hanya kemampuan membaca data mentah (misalnya sebuah file video atau audio), 113maka simpanlah file itu di direktori {@code res/raw/} dan baca aliran byte dengan menggunakan {@link 114android.content.res.Resources#openRawResource(int) openRawResource()}.</p> 115 116</div> 117</div> 118 119 120<h3>Sintaks</h3> 121 122<p>Inilah sintaks untuk mengacu sumber daya dalam kode:</p> 123 124<pre class="classic no-pretty-print"> 125[<em><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em> 126</pre> 127 128<ul> 129 <li><em> {@code <package_name>}</em>adalah nama paket yang di dalamnya terdapat sumber daya (tidak 130dibutuhkan bila mengacu sumber daya dari paket Anda sendiri).</li> 131 <li><em>{@code <resource_type>}</em> adalah subkelas {@code R} untuk tipe sumber daya.</li> 132 <li><em>{@code <resource_name>}</em> bisa berupa nama file sumber daya 133tanpa ekstensi atau nilai atribut {@code android:name} dalam elemen XML (untuk nilai 134sederhana).</li> 135</ul> 136<p>Lihat <a href="available-resources.html">Tipe Sumber Daya</a> untuk 137informasi selengkapnya tentang masing-masing tipe sumber daya dan cara mengacunya.</p> 138 139 140<h3>Kasus penggunaan</h3> 141 142<p>Ada banyak metode yang menerima parameter ID sumber daya dan Anda bisa mengambil sumber daya dengan menggunakan 143metode di {@link android.content.res.Resources}. Anda bisa mengambil instance {@link 144android.content.res.Resources} dengan {@link android.content.Context#getResources 145Context.getResources()}.</p> 146 147 148<p>Berikut adalah beberapa contoh cara mengakses sumber daya dalam kode:</p> 149 150<pre> 151// Load a background for the current screen from a drawable resource 152{@link android.app.Activity#getWindow()}.{@link 153android.view.Window#setBackgroundDrawableResource(int) 154setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ; 155 156// Set the Activity title by getting a string from the Resources object, because 157// this method requires a CharSequence rather than a resource ID 158{@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence) 159setTitle}(getResources().{@link android.content.res.Resources#getText(int) 160getText}(<strong>R.string.main_title</strong>)); 161 162// Load a custom layout for the current screen 163{@link android.app.Activity#setContentView(int) 164setContentView}(<strong>R.layout.main_screen</strong>); 165 166// Set a slide in animation by getting an Animation from the Resources object 167mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation) 168setInAnimation}(AnimationUtils.loadAnimation(this, 169 <strong>R.anim.hyperspace_in</strong>)); 170 171// Set the text on a TextView object using a resource ID 172TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>); 173msgTextView.{@link android.widget.TextView#setText(int) 174setText}(<strong>R.string.hello_message</strong>); 175</pre> 176 177 178<p class="caution"><strong>Perhatian:</strong> Anda tidak boleh memodifikasi file {@code 179R.java} secara manual—, ini dihasilkan oleh alat {@code aapt} bila proyek Anda telah 180dikompilasi. Perubahan apa pun akan ditimpa bila nanti Anda mengompilasi.</p> 181 182 183 184<h2 id="ResourcesFromXml">Mengakses Sumber Daya dari XML</h2> 185 186<p>Anda bisa mendefinisikan nilai untuk beberapa atribut dan elemen XML dengan menggunakan 187acuan ke sumber daya yang ada. Anda akan sering melakukannya saat membuat file layout, untuk 188memasok string dan gambar bagi widget Anda.</p> 189 190<p>Misalnya, jika Anda menambahkan sebuah {@link android.widget.Button} ke layout, Anda harus menggunakan 191sebuah <a href="string-resource.html">sumber daya string</a> bagi teks tombolnya:</p> 192 193<pre> 194<Button 195 android:layout_width="fill_parent" 196 android:layout_height="wrap_content" 197 android:text="<strong>@string/submit</strong>" /> 198</pre> 199 200 201<h3>Sintaks</h3> 202 203<p>Berikut adalah sintaks untuk mengacu sumber daya di sumber daya XML:</p> 204 205<pre class="classic no-pretty-print"> 206@[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em> 207</pre> 208 209<ul> 210 <li>{@code <package_name>} adalah nama paket yang di dalamnya terdapat sumber daya (tidak 211dibutuhkan bila mengacu sumber daya dari paket yang sama)</li> 212 <li>{@code <resource_type>} adalah subkelas 213{@code R} untuk tipe sumber daya</li> 214 <li>{@code <resource_name>} bisa berupa nama file sumber daya 215tanpa ekstensi atau nilai atribut {@code android:name} dalam elemen XML (untuk nilai 216sederhana).</li> 217</ul> 218 219<p>Lihat <a href="available-resources.html">Tipe Sumber Daya</a> untuk 220informasi selengkapnya tentang masing-masing tipe sumber daya dan cara mengacunya.</p> 221 222 223<h3>Kasus penggunaan</h3> 224 225<p>Dalam beberapa kasus, Anda harus menggunakan sumber daya untuk suatu nilai dalam XML (misalnya, untuk menerapkan gambar yang bisa ditarik 226pada widget), namun Anda juga bisa menggunakan sumber daya di XML mana saja yang menerima nilai sederhana. Misalnya, jika 227Anda mempunyai file sumber daya berikut yang berisi <a href="more-resources.html#Color">sumber daya warna</a> dan <a href="string-resource.html">sumber daya string</a>:</p> 228 229<pre> 230<?xml version="1.0" encoding="utf-8"?> 231<resources> 232 <color name="opaque_red">#f00</color> 233 <string name="hello">Hello!</string> 234</resources> 235</pre> 236 237<p>Anda bisa menggunakan sumber daya ini dalam file layout berikut untuk mengatur warna teks dan 238string teks:</p> 239 240<pre> 241<?xml version="1.0" encoding="utf-8"?> 242<EditText xmlns:android="http://schemas.android.com/apk/res/android" 243 android:layout_width="fill_parent" 244 android:layout_height="fill_parent" 245 android:textColor="<strong>@color/opaque_red</strong>" 246 android:text="<strong>@string/hello</strong>" /> 247</pre> 248 249<p>Dalam hal ini, Anda tidak perlu menyebutkan nama paket dalam sumber daya acuan karena 250sumber daya berasal dari paket Anda sendiri. Untuk 251mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya:</p> 252 253<pre> 254<?xml version="1.0" encoding="utf-8"?> 255<EditText xmlns:android="http://schemas.android.com/apk/res/android" 256 android:layout_width="fill_parent" 257 android:layout_height="fill_parent" 258 android:textColor="<strong>@android:color/secondary_text_dark</strong>" 259 android:text="@string/hello" /> 260</pre> 261 262<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang 263waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain. 264Untuk informasi tentang cara menciptakan 265sumber daya alternatif (seperti string lokal), lihat <a href="providing-resources.html#AlternativeResources">Menyediakan Sumber Daya Alternatif 266</a>. Untuk panduan lengkap melokalkan aplikasi Anda ke bahasa lain, 267lihat <a href="localization.html">Pelokalan</a>.</p> 268 269<p>Anda bahkan bisa menggunakan sumber daya dalam XML untuk membuat alias. Misalnya, Anda bisa membuat 270sumber daya yang bisa ditarik yang merupakan alias bagi sumber daya yang bisa ditarik lainnya:</p> 271 272<pre> 273<?xml version="1.0" encoding="utf-8"?> 274<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 275 android:src="@drawable/other_drawable" /> 276</pre> 277 278<p>Hal ini terdengar berlebihan, namun bisa sangat berguna saat menggunakan sumber daya alternatif. Baca selengkapnya tentang 279<a href="providing-resources.html#AliasResources">Membuat sumber daya alias</a>.</p> 280 281 282 283<h3 id="ReferencesToThemeAttributes">Mengacu atribut gaya</h3> 284 285<p>Sumber daya atribut gaya memungkinkan Anda mengacu nilai 286suatu atribut dalam tema yang diterapkan saat ini. Dengan mengacu sebuah atribut gaya memungkinkan Anda 287menyesuaikan tampilan elemen UI dengan mengatur gayanya agar cocok dengan beragam variasi standar yang dipasok oleh 288tema saat ini, sebagai ganti memasok nilai yang ditanamkan (hard-coded). Mengacu sebuah atribut gaya 289pada dasarnya adalah "gunakan gaya yang didefinisikan oleh atribut ini, dalam tema saat ini".</p> 290 291<p>Untuk mengacu sebuah atribut gaya, sintaks namanya hampir sama dengan format sumber daya normal 292, namun sebagai ganti simbol @ ({@code @}), gunakan sebuah tanda tanya ({@code ?}), dan 293porsi tipe sumber daya bersifat opsional. Sebagai contoh:</p> 294 295<pre class="classic"> 296?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> 297</pre> 298 299<p>Misalnya, begini cara Anda mengacu suatu atribut untuk mengatur warna teks agar cocok dengan 300warna teks "utama" tema sistem:</p> 301 302<pre> 303<EditText id="text" 304 android:layout_width="fill_parent" 305 android:layout_height="wrap_content" 306 android:textColor="<strong>?android:textColorSecondary</strong>" 307 android:text="@string/hello_world" /> 308</pre> 309 310<p>Di sini, atribut {@code android:textColor} menyebutkan nama atribut gaya 311dalam tema saat ini. Android kini menggunakan nilai yang diterapkan pada atribut gaya {@code android:textColorSecondary} 312sebagai nilai untuk {@code android:textColor} dalam widget ini. Karena alat sumber daya 313mengetahui bahwa atribut sumber daya diharapkan dalam konteks ini, 314maka Anda tidak perlu menyatakan tipenyanya secara eksplisit (yang akan berupa 315<code>?android:attr/textColorSecondary</code>)—Anda bisa mengecualikan tipe {@code attr}.</p> 316 317 318 319 320<h2 id="PlatformResources">Mengakses Sumber Daya Platform</h2> 321 322<p>Android berisi sejumlah sumber daya standar, seperti gaya, tema, dan layout. Untuk 323mengakses semua sumber daya ini, tetapkan acuan sumber daya Anda dengan nama paket 324<code>android</code>. Misalnya, Android menyediakan sumber daya layout yang bisa Anda gunakan untuk 325item daftar dalam{@link android.widget.ListAdapter}:</p> 326 327<pre> 328{@link android.app.ListActivity#setListAdapter(ListAdapter) 329setListAdapter}(new {@link 330android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray)); 331</pre> 332 333<p>Dalam contoh ini, {@link android.R.layout#simple_list_item_1} adalah sumber daya layout yang didefinisikan oleh 334platform untuk item di {@link android.widget.ListView}. Anda bisa menggunakannya sebagai ganti menciptakan 335layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang 336<a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>.</p> 337 338