• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&#64;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">&#64;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>&lt;package_name&gt;</em>.]R.<em>&lt;resource_type&gt;</em>.<em>&lt;resource_name&gt;</em>
126</pre>
127
128<ul>
129  <li><em> {@code &lt;package_name&gt;}</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 &lt;resource_type&gt;}</em> adalah subkelas {@code R} untuk tipe sumber daya.</li>
132  <li><em>{@code &lt;resource_name&gt;}</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&mdash;, 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&lt;Button
195    android:layout_width="fill_parent"
196    android:layout_height="wrap_content"
197    android:text="<strong>@string/submit</strong>" /&gt;
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&#64;[<em>&lt;package_name&gt;</em>:]<em>&lt;resource_type&gt;</em>/<em>&lt;resource_name&gt;</em>
207</pre>
208
209<ul>
210  <li>{@code &lt;package_name&gt;} adalah nama paket yang di dalamnya terdapat sumber daya (tidak
211dibutuhkan bila mengacu sumber daya dari paket yang sama)</li>
212  <li>{@code &lt;resource_type&gt;} adalah subkelas
213{@code R} untuk tipe sumber daya</li>
214  <li>{@code &lt;resource_name&gt;} 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&lt;?xml version="1.0" encoding="utf-8"?>
231&lt;resources>
232   &lt;color name="opaque_red">#f00&lt;/color>
233   &lt;string name="hello">Hello!&lt;/string>
234&lt;/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&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
242&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
243    android:layout_width=&quot;fill_parent&quot;
244    android:layout_height=&quot;fill_parent&quot;
245    android:textColor=&quot;<strong>&#64;color/opaque_red</strong>&quot;
246    android:text=&quot;<strong>&#64;string/hello</strong>&quot; /&gt;
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&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
255&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
256    android:layout_width=&quot;fill_parent&quot;
257    android:layout_height=&quot;fill_parent&quot;
258    android:textColor=&quot;<strong>&#64;android:color/secondary_text_dark</strong>&quot;
259    android:text=&quot;&#64;string/hello&quot; /&gt;
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&lt;?xml version="1.0" encoding="utf-8"?>
274&lt;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>&lt;package_name&gt;</em>:][<em>&lt;resource_type&gt;</em>/]<em>&lt;resource_name&gt;</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&lt;EditText id=&quot;text&quot;
304    android:layout_width=&quot;fill_parent&quot;
305    android:layout_height=&quot;wrap_content&quot;
306    android:textColor=&quot;<strong>?android:textColorSecondary</strong>&quot;
307    android:text=&quot;&#64;string/hello_world&quot; /&gt;
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>)&mdash;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}&lt;String&gt;(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