• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Menyediakan 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>Berbagai tipe sumber daya termasuk dalam subdirektori {@code res/}</li>
11    <li>Sumber daya alternatif menyediakan file sumber daya dengan konfigurasi tertentu</li>
12    <li>Sertakan selalu sumber daya default agar aplikasi Anda tidak bergantung pada
13konfigurasi perangkat tertentu</li>
14  </ul>
15  <h2>Dalam dokumen ini</h2>
16  <ol>
17    <li><a href="#ResourceTypes">Mengelompokkan Tipe Sumber Daya</a></li>
18    <li><a href="#AlternativeResources">Menyediakan Sumber Daya Alternatif</a>
19      <ol>
20        <li><a href="#QualifierRules">Aturan penamaan qualifier</a></li>
21        <li><a href="#AliasResources">Membuat sumber daya alias</a></li>
22      </ol>
23    </li>
24    <li><a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</a></li>
25    <li><a href="#BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</a></li>
26  </ol>
27
28  <h2>Lihat juga</h2>
29  <ol>
30    <li><a href="accessing-resources.html">Mengakses Sumber Daya</a></li>
31    <li><a href="available-resources.html">Tipe Sumber Daya</a></li>
32    <li><a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
33Layar</a></li>
34  </ol>
35</div>
36</div>
37
38<p>Anda harus selalu mengeksternalkan sumber daya aplikasi seperti gambar dan string dari kode
39, agar Anda bisa memeliharanya secara independen. Anda juga harus menyediakan sumber daya alternatif untuk
40konfigurasi perangkat tertentu, dengan mengelompokkannya dalam direktori sumber daya bernama khusus. Saat
41runtime, Android menggunakan sumber daya yang sesuai berdasarkan konfigurasi saat ini. Misalnya, Anda mungkin
42ingin menyediakan layout UI berbeda bergantung pada ukuran layar atau string berbeda bergantung pada
43pengaturan bahasa.</p>
44
45<p>Setelah mengeksternalkan sumber daya aplikasi, Anda dapat mengaksesnya menggunakan
46ID sumber daya yang dibuat dalam kelas {@code R} proyek Anda. Cara menggunakan
47sumber daya dalam aplikasi dibahas dalam <a href="accessing-resources.html">Mengakses
48Sumber Daya</a>. Dokumen ini menampilkan cara mengelompokkan sumber daya
49dalam proyek Android Anda dan menyediakan sumber daya alternatif untuk konfigurasi perangkat tertentu.</p>
50
51
52<h2 id="ResourceTypes">Mengelompokkan Tipe Sumber Daya</h2>
53
54<p>Anda harus menempatkan setiap tipe sumber daya dalam subdirektori spesifik pada direktori
55{@code res/} proyek. Misalnya, inilah hierarki file untuk proyek sederhana:</p>
56
57<pre class="classic no-pretty-print">
58MyProject/
59    src/  <span style="color:black">
60        MyActivity.java  </span>
61    res/
62        drawable/  <span style="color:black">
63            graphic.png  </span>
64        layout/  <span style="color:black">
65            main.xml
66            info.xml</span>
67        mipmap/  <span style="color:black">
68            icon.png </span>
69        values/  <span style="color:black">
70            strings.xml  </span>
71</pre>
72
73<p>Seperti yang Anda lihat dalam contoh ini, direktori {@code res/} berisi semua sumber daya (dalam
74subdirektori): sumber daya gambar, dua sumber daya layout, direktori {@code mipmap/} untuk ikon
75launcher, dan satu file sumber daya string. Nama direktori
76sumber daya penting dan dijelaskan dalam tabel 1.</p>
77
78<p class="note"><strong>Catatan:</strong> Untuk informasi selengkapnya tentang menggunakan folder mipmap, lihat
79<a href="{@docRoot}tools/projects/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</p>
80
81<p class="table-caption" id="table1"><strong>Tabel 1.</strong> Direktori sumber daya
82didukung dalam direktori proyek {@code res/}.</p>
83
84<table>
85  <tr>
86    <th scope="col">Direktori</th>
87    <th scope="col">Tipe Sumber Daya</th>
88  </tr>
89
90  <tr>
91    <td><code>animator/</code></td>
92    <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/prop-animation.html">animasi
93properti</a>.</td>
94  </tr>
95
96  <tr>
97    <td><code>anim/</code></td>
98    <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">animasi
99tween</a>. (Animasi properti juga dapat disimpan dalam direktori ini, namun
100direktori {@code animator/} lebih disukai bagi animasi properti agar kedua tipe
101ini dapat dibedakan.)</td>
102  </tr>
103
104  <tr>
105    <td><code>color/</code></td>
106    <td>File XML yang mendefinisikan daftar status warna. Lihat <a href="color-list-resource.html">Sumber Daya
107Daftar Status Warna</a></td>
108  </tr>
109
110  <tr>
111    <td><code>drawable/</code></td>
112
113    <td><p>File bitmap ({@code .png}, {@code .9.png}, {@code .jpg}, {@code .gif}) atau file XML yang
114dikompilasi menjadi subtipe sumber daya drawable berikut:</p>
115      <ul>
116        <li>File bitmap</li>
117        <li>Nine-Patches (bitmap yang dapat diubah ukurannya)</li>
118        <li>Daftar status</li>
119        <li>Bentuk</li>
120        <li>Drawable animasi</li>
121        <li>Drawable lainnya</li>
122      </ul>
123      <p>Lihat <a href="drawable-resource.html">Sumber Daya Drawable</a>.</p>
124    </td>
125  </tr>
126
127  <tr>
128    <td><code>mipmap/</code></td>
129    <td>File drawable untuk densitas ikon launcher yang berbeda. Untuk informasi selengkapnya tentang
130 mengelola ikon launcher dengan folder {@code mipmap/}, lihat
131<a href="{@docRoot}tools/project/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</td>
132  </tr>
133
134  <tr>
135    <td><code>layout/</code></td>
136    <td>File XML yang mendefinisikan layout antarmuka pengguna.
137        Lihat <a href="layout-resource.html">Sumber Daya Layout</a>.</td>
138  </tr>
139
140  <tr>
141    <td><code>menu/</code></td>
142    <td>File XML yang mendefinisikan menu aplikasi, seperti Menu Opsi, Menu Konteks, atau Sub
143Menu. Lihat <a href="menu-resource.html">Sumber Daya Menu</a>.</td>
144  </tr>
145
146  <tr>
147    <td><code>raw/</code></td>
148    <td><p>File tak didukung yang akan disimpan dalam bentuk mentah. Untuk membuka sumber daya ini dengan
149{@link java.io.InputStream} mentah, panggil {@link android.content.res.Resources#openRawResource(int)
150Resources.openRawResource()} dengan ID sumber daya, yaitu {@code R.raw.<em>filename</em>}.</p>
151      <p>Akan tetapi, jika Anda butuh akses ke nama file asli dan hierarki file, Anda bisa mempertimbangkan
152untuk menyimpan beberapa sumber daya dalam direktori {@code
153assets/} (sebagai ganti {@code res/raw/}). File dalam {@code assets/} tidak diberi
154ID sumber daya, jadi Anda bisa membacanya hanya dengan menggunakan {@link android.content.res.AssetManager}.</p></td>
155  </tr>
156
157  <tr>
158    <td><code>values/</code></td>
159    <td><p>File XML yang berisi nilai-nilai sederhana, seperti string, integer, dan warna.</p>
160      <p>Walaupun file sumber daya XML dalam subdirektori {@code res/} lainnya mendefinisikan satu sumber daya
161berdasarkan nama file XML, file dalam direktori {@code values/} menggambarkan beberapa sumber daya.
162Untuk file dalam direktori ini, setiap anak elemen {@code &lt;resources&gt;} mendefinisikan satu sumber
163daya. Misalnya, elemen {@code &lt;string&gt;} membuat sumber daya
164{@code R.string} dan elemen {@code &lt;color&gt;} membuat sumber daya {@code R.color}
165.</p>
166      <p>Karena setiap sumber daya didefinisikan dengan elemen XML-nya sendiri, Anda bisa bebas menamai file
167ini dan menempatkan tipe sumber daya berbeda dalam satu file. Akan tetapi, agar jelas, Anda mungkin
168perlu menempatkan tipe sumber daya unik dalam file berbeda. Misalnya, berikut ini adalah beberapa ketentuan
169penamaan file untuk sumber daya yang dapat Anda buat dalam direktori ini:</p>
170      <ul>
171        <li>arrays.xml untuk larik sumber daya tipe (<a href="more-resources.html#TypedArray">larik bertipe</a>).</li>
172        <li>colors.xml untuk <a href="more-resources.html#Color">nilai warna</a></li>
173        <li>dimens.xml untuk <a href="more-resources.html#Dimension">nilai dimensi</a>.</li>
174        <li>strings.xml untuk <a href="string-resource.html">nilai
175string</a>.</li>
176        <li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li>
177      </ul>
178      <p>Lihat <a href="string-resource.html">Sumber Daya String</a>,
179        <a href="style-resource.html">Sumber Daya Gaya</a>, dan
180        <a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p>
181    </td>
182  </tr>
183
184  <tr>
185    <td><code>xml/</code></td>
186    <td>File XML tak didukung yang bisa dibaca saat runtime dengan memanggil {@link
187android.content.res.Resources#getXml(int) Resources.getXML()}. Berbagai file konfigurasi XML
188harus disimpan di sini, seperti <a href="{@docRoot}guide/topics/search/searchable-config.html">konfigurasi yang dapat dicari</a>.
189<!-- or preferences configuration. --></td>
190  </tr>
191</table>
192
193<p class="caution"><strong>Perhatian:</strong> Jangan menyimpan file sumber daya secara langsung dalam
194direktori {@code res/}&mdash; karena akan menyebabkan kesalahan compiler.</p>
195
196<p>Untuk informasi selengkapnya tentang tipe sumber daya tertentu, lihat dokumentasi <a href="available-resources.html">Tipe Sumber Daya</a>.</p>
197
198<p>Sumber daya yang disimpan dalam subdirektori yang didefinisikan dalam tabel 1 adalah sumber daya
199"default" Anda. Berarti sumber daya ini mendefinisikan desain default dan konten untuk aplikasi Anda.
200Akan tetapi, beberapa tipe perangkat berbasis Android mungkin memanggil tipe sumber daya yang berbeda.
201Misalnya, jika perangkat memiliki layar yang lebih besar daripada layar normal, maka Anda harus
202menyediakan sumber daya layout berbeda yang memanfaatkan ruang layar yang lebih besar. Atau, jika perangkat
203memiliki pengaturan bahasa berbeda, maka Anda harus menyediakan sumber daya string berbeda yang menerjemahkan teks dalam
204antarmuka pengguna Anda. Untuk menyediakan sumber daya berbeda ini bagi
205konfigurasi perangkat yang berbeda, Anda harus menyediakan sumber daya alternatif, selain sumber
206daya default.</p>
207
208
209<h2 id="AlternativeResources">Menyediakan Sumber Daya Alternatif</h2>
210
211
212<div class="figure" style="width:429px">
213<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
214<p class="img-caption">
215<strong>Gambar 1.</strong> Dua perangkat berbeda, masing-masing menggunakan sumber daya layout berbeda.</p>
216</div>
217
218<p>Hampir setiap aplikasi harus menyediakan sumber daya alternatif untuk mendukung konfigurasi
219perangkat tertentu. Misalnya, Anda harus menyertakan sumber daya drawable alternatif untuk densitas layar
220berbeda dan sumber daya string alternatif untuk bahasa yang berbeda. Saat runtime, Android
221akan mendeteksi konfigurasi perangkat aktif dan memuat
222sumber daya yang sesuai untuk aplikasi Anda.</p>
223
224<p>Untuk menyebutkan alternatif konfigurasi tertentu untuk satu set sumber daya:</p>
225<ol>
226  <li>Buat direktori baru dalam {@code res/} yang dinamai dalam bentuk {@code
227<em>&lt;resources_name&gt;</em>-<em>&lt;config_qualifier&gt;</em>}.
228    <ul>
229      <li><em>{@code &lt;resources_name&gt;}</em> adalah nama direktori dari sumber daya default
230terkait (didefinisikan dalam tabel 1).</li>
231      <li><em>{@code &lt;qualifier&gt;}</em> adalah nama yang menetapkan konfigurasi individu
232yang akan digunakan sumber daya ini (didefinisikan dalam tabel 2).</li>
233    </ul>
234    <p>Anda bisa menambahkan lebih dari satu <em>{@code &lt;qualifier&gt;}</em>. Pisahkan masing-masing
235dengan tanda hubung.</p>
236    <p class="caution"><strong>Perhatian:</strong> Saat menambahkan beberapa qualifier, Anda
237harus menempatkannya dalam urutan yang sama dengan yang tercantum dalam tabel 2. Jika urutan qualifier
238salah, sumber daya akan diabaikan.</p>
239  </li>
240  <li>Simpan masing-masing sumber daya alternatif dalam direktori baru ini. File sumber daya harus dinamai
241sama persis dengan file sumber daya default.</li>
242</ol>
243
244<p>Misalnya, berikut ini beberapa sumber daya default dan sumber daya alternatif:</p>
245
246<pre class="classic no-pretty-print">
247res/
248    drawable/   <span style="color:black">
249        icon.png
250        background.png    </span>
251    drawable-hdpi/  <span style="color:black">
252        icon.png
253        background.png  </span>
254</pre>
255
256<p>Qualifier {@code hdpi} menunjukkan bahwa sumber daya dalam direktori itu diperuntukkan bagi perangkat dengan
257layar densitas tinggi. Gambar di masing-masing direktori drawable memiliki ukuran untuk densitas layar
258tertentu, namun nama filenya persis
259sama. Dengan demikian, ID sumber daya yang Anda gunakan untuk mengacu gambar {@code icon.png} atau @code
260background.png} selalu sama, namun Android memilih
261versi masing-masing sumber daya yang paling cocok dengan perangkat saat ini, dengan membandingkan informasi konfigurasi
262perangkat dengan qualifier dalam nama direktori sumber daya.</p>
263
264<p>Android mendukung beberapa qualifier konfigurasi dan Anda dapat
265menambahkan beberapa qualifier ke satu nama direktori, dengan memisahkan setiap qualifier dengan tanda hubung. Tabel 2
266berisi daftar qualifier konfigurasi yang valid, dalam urutan prioritas&mdash;jika Anda menggunakan beberapa
267qualifier sebagai direktori sumber daya, Anda harus menambahkannya ke nama direktori sesuai urutan
268yang tercantum dalam tabel.</p>
269
270
271<p class="table-caption" id="table2"><strong>Tabel 2.</strong> Nama-nama
272qualifier konfigurasi.</p>
273<table>
274    <tr>
275        <th>Konfigurasi</th>
276        <th>Nilai-nilai Qualifier</th>
277        <th>Keterangan</th>
278    </tr>
279    <tr id="MccQualifier">
280      <td>MCC dan MNC</td>
281      <td>Contoh:<br/>
282        <code>mcc310</code><br/>
283        <code><nobr>mcc310-mnc004</nobr></code><br/>
284        <code>mcc208-mnc00</code><br/>
285        dll.
286      </td>
287      <td>
288        <p>Kode negara seluler (MCC), bisa diikuti dengan kode jaringan seluler (MNC)
289 dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja,
290 <code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk
291Orange.</p>
292        <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal
293dari kartu SIM.</p>
294        <p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal
295spesifik untuk negara itu di aplikasi Anda). Jika Anda perlu menetapkan hanya berdasarkan bahasa, maka gunakan qualifier
296<em>bahasa dan wilayah</em> sebagai gantinya (akan dibahas nanti). Jika Anda memutuskan untuk menggunakan qualifier MCC dan
297MNC, Anda harus melakukannya dengan hati-hati dan menguji apakah qualifier itu berjalan sesuai harapan.</p>
298        <p>Lihat juga bidang konfigurasi {@link
299android.content.res.Configuration#mcc}, dan {@link
300android.content.res.Configuration#mnc}, yang masing-masing menunjukkan kode negara seluler saat ini
301dan kode jaringan seluler.</p>
302      </td>
303    </tr>
304    <tr id="LocaleQualifier">
305      <td>Bahasa dan wilayah</td>
306      <td>Contoh:<br/>
307        <code>en</code><br/>
308        <code>fr</code><br/>
309        <code>en-rUS</code><br/>
310        <code>fr-rFR</code><br/>
311        <code>fr-rCA</code><br/>
312        dll.
313      </td>
314      <td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO
315639-1</a>, bisa juga diikuti dengan kode wilayah
316dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO
3173166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}").
318        </p><p>
319        Kode <em>tidak</em> membedakan huruf besar atau kecil; awalan {@code r} akan digunakan untuk
320membedakan bagian wilayah.
321        Anda tidak bisa menetapkan wilayah saja.</p>
322        <p>Ini bisa berubah selama masa pakai
323aplikasi Anda jika pengguna mengubah bahasanya dalam pengaturan sistem. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang
324bagaimana hal ini dapat memengaruhi aplikasi Anda selama runtime.</p>
325        <p>Lihat <a href="localization.html">Pelokalan</a> untuk panduan lengkap melokalkan
326aplikasi Anda ke bahasa lain.</p>
327        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#locale} yang menunjukkan
328bahasa setempat yang digunakan saat ini.</p>
329      </td>
330    </tr>
331    <tr id="LayoutDirectionQualifier">
332      <td>Arah Layout</td>
333      <td><code>ldrtl</code><br/>
334        <code>ldltr</code><br/>
335      </td>
336      <td><p>Arah layout aplikasi Anda. {@code ldrtl} berarti "arah layout dari kanan ke kiri".
337 {@code ldltr} berarti "arah layout dari kiri ke kanan" dan merupakan nilai implisit default.
338      </p>
339      <p>Ini bisa berlaku untuk sumber daya mana pun seperti layout, drawable, atau nilai-nilai.
340      </p>
341      <p>Misalnya, jika Anda ingin memberikan beberapa layout khusus untuk bahasa Arab dan beberapa
342layout umum untuk setiap bahasa lainnya yang menggunakan "kanan-ke-kiri" lainnya (seperti bahasa Persia atau Ibrani) maka Anda akan memiliki:
343      </p>
344<pre class="classic no-pretty-print">
345res/
346    layout/   <span style="color:black">
347        main.xml  </span>(Default layout)
348    layout-ar/  <span style="color:black">
349        main.xml  </span>(Specific layout for Arabic)
350    layout-ldrtl/  <span style="color:black">
351        main.xml  </span>(Any "right-to-left" language, except
352                  for Arabic, because the "ar" language qualifier
353                  has a higher precedence.)
354</pre>
355        <p class="note"><strong>Catatan:</strong> Untuk mengaktifkan fitur
356layout kanan-ke-kiri untuk aplikasi, Anda harus mengatur <a href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code
357        supportsRtl}</a> ke {@code "true"} dan mengatur <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> ke 17 atau yang lebih tinggi.</p>
358        <p><em>Ditambahkan dalam API level 17.</em></p>
359      </td>
360    </tr>
361    <tr id="SmallestScreenWidthQualifier">
362      <td>smallestWidth</td>
363      <td><code>sw&lt;N&gt;dp</code><br/><br/>
364        Contoh:<br/>
365        <code>sw320dp</code><br/>
366        <code>sw600dp</code><br/>
367        <code>sw720dp</code><br/>
368        dll.
369      </td>
370      <td>
371        <p>Ukuran dasar layar, sebagaimana yang ditunjukkan oleh dimensi terpendek dari area layar
372yang tersedia. Secara spesifik, smallestWidth perangkat adalah yang terpendek dari
373tinggi dan lebar layar yang tersedia (Anda dapat menganggapnya sebagai "lebar terkecil yang memungkinkan" untuk layar). Anda bisa
374menggunakan qualifier ini untuk memastikan bahwa, apa pun orientasi layar saat ini, aplikasi
375Anda memiliki paling tidak {@code &lt;N&gt;} dps dari lebar yang tersedia untuk UI-nya.</p>
376        <p>Misalnya, jika layout mengharuskan dimensi layar terkecilnya setiap saat paling tidak
377600 dp, maka Anda dapat menggunakan qualifer ini untuk membuat sumber daya layout, {@code
378res/layout-sw600dp/}. Sistem akan menggunakan sumber daya ini hanya bila dimensi layar terkecil yang
379tersedia paling tidak 600 dp, tanpa mempertimbangkan apakah sisi 600 dp adalah tinggi atau
380lebar yang dipersepsikan pengguna. SmallestWidth adalah karakteristik ukuran layar tetap dari perangkat; <strong>smallestWidth
381perangkat tidak berubah saat orientasi layar berubah</strong>.</p>
382        <p>SmallestWidth perangkat memperhitungkan dekorasi layar dan UI sistem. Misalnya
383, jika perangkat memiliki beberapa elemen UI persisten pada layar yang menghitung ruang di sepanjang
384sumbu smallestWidth, sistem akan mendeklarasikan smallestWidth lebih kecil daripada ukuran layar sebenarnya,
385karena itu adalah piksel layar yang tidak tersedia untuk UI Anda. Sehingga nilai yang Anda
386gunakan haruslah merupakan dimensi terkecil sebenarnya yang <em>dibutuhkan oleh layout Anda</em> (biasanya, nilai ini adalah
387"lebar terkecil" yang didukung layout Anda, apa pun orientasi layar saat ini).</p>
388        <p>Sebagian nilai yang mungkin Anda gunakan untuk ukuran layar umum:</p>
389        <ul>
390          <li>320, untuk perangkat berkonfigurasi layar seperti:
391            <ul>
392              <li>240x320 ldpi (handset QVGA)</li>
393              <li>320x480 mdpi (handset)</li>
394              <li>480x800 hdpi (handset densitas tinggi)</li>
395            </ul>
396          </li>
397          <li>480, untuk layar seperti 480x800 mdpi (tablet/handset).</li>
398          <li>600, untuk layar seperti 600x1024 mdpi (tablet 7").</li>
399          <li>720, untuk layar seperti 720x1280 mdpi (tablet 10").</li>
400        </ul>
401        <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda untuk
402qualifier smallestWidth terkecil, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
403smallestWidth perangkat. </p>
404        <p><em>Ditambahkan dalam API level 13.</em></p>
405        <p>Lihat juga atribut <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code
406android:requiresSmallestWidthDp}</a>, yang mendeklarasikan smallestWidth minimum yang
407kompatibel dengan aplikasi Anda, dan bidang konfigurasi {@link
408android.content.res.Configuration#smallestScreenWidthDp}, yang menyimpan nilai
409smallestWidth perangkat.</p>
410        <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
411qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
412Multi Layar</a>.</p>
413      </td>
414    </tr>
415    <tr id="ScreenWidthQualifier">
416      <td>Lebar yang tersedia</td>
417      <td><code>w&lt;N&gt;dp</code><br/><br/>
418        Contoh:<br/>
419        <code>w720dp</code><br/>
420        <code>w1024dp</code><br/>
421        dll.
422      </td>
423      <td>
424        <p>Menetapkan lebar layar minimum yang tersedia, di unit {@code dp} yang
425menggunakan sumber daya&mdash;yang didefinisikan oleh nilai <code>&lt;N&gt;</code>.  Nilai konfigurasi ini
426 akan berubah bila orientasi
427berubah antara lanskap dan potret agar cocok dengan lebar sebenarnya saat ini.</p>
428        <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
429 untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
430 lebar layar perangkat saat ini.  Nilai
431di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
432elemen UI persisten di tepi kiri atau kanan, layar
433menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan
434elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p>
435        <p><em>Ditambahkan dalam API level 13.</em></p>
436        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenWidthDp}
437 yang menyimpan lebar layar saat ini.</p>
438        <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
439qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
440Multi Layar</a>.</p>
441      </td>
442    </tr>
443    <tr id="ScreenHeightQualifier">
444      <td>Tinggi yang tersedia</td>
445      <td><code>h&lt;N&gt;dp</code><br/><br/>
446        Contoh:<br/>
447        <code>h720dp</code><br/>
448        <code>h1024dp</code><br/>
449        dll.
450      </td>
451      <td>
452        <p>Menetapkan tinggi layar minimum yang tersedia, dalam satuan "dp" yang harus digunakan
453sumber daya &mdash;bersama nilai yang didefinisikan oleh <code>&lt;N&gt;</code>.  Nilai konfigurasi ini
454 akan berubah saat orientasi
455berubah antara lanskap dan potret agar cocok dengan tinggi sebenarnya saat ini.</p>
456        <p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
457 untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi)
458 tinggi layar perangkat saat ini.  Nilai
459di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
460elemen UI persisten di tepi atas atau bawah, layar akan
461menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan
462elemen UI ini dan mengurangi ruang aplikasi yang tersedia.  Dekorasi
463layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
464disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula
465dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan
466untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan.
467        <p><em>Ditambahkan dalam API level 13.</em></p>
468        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp}
469 yang menyimpan lebar layar saat ini.</p>
470        <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
471qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
472Multi Layar</a>.</p>
473      </td>
474    </tr>
475    <tr id="ScreenSizeQualifier">
476      <td>Ukuran layar</td>
477      <td>
478        <code>small</code><br/>
479        <code>normal</code><br/>
480        <code>large</code><br/>
481        <code>xlarge</code>
482      </td>
483      <td>
484        <ul class="nolist">
485        <li>{@code small}: Layar yang berukuran serupa dengan
486layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
487adalah sekitar 320x426 satuan dp.  Misalnya QVGA densitas rendah
488dan VGA densitas tinggi.</li>
489        <li>{@code normal}: Layar yang berukuran serupa dengan
490layar HVGA densitas sedang. Ukuran layout minimum untuk
491layar normal adalah sekitar 320x470 satuan dp.  Contoh layar seperti itu adalah
492WQVGA densitas rendah, HVGA densitas sedang, WVGA
493     densitas tinggi.</li>
494        <li>{@code large}: Layar yang berukuran serupa dengan
495layar VGA densitas sedang.
496        Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp.
497        Misalnya layar VGA dan WVGA densitas sedang.</li>
498        <li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
499densitas sedang tradisional. Ukuran layout minimum untuk
500layar ekstra besar adalah sekitar 720x960 satuan dp.  Perangkat dengan layar ekstra besar
501seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar
502 berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li>
503        </ul>
504        <p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa
505sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber
506daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya
507mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
508        <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan
509qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi
510Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code
511xlarge}, namun perangkat memiliki ukuran layar normal).</p>
512        <p><em>Ditambahkan dalam API level 4.</em></p>
513
514        <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
515Layar</a> untuk informasi selengkapnya.</p>
516        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
517 yang menunjukkan apakah layar berukuran kecil, normal, atau
518besar.</p>
519      </td>
520    </tr>
521    <tr id="ScreenAspectQualifier">
522      <td>Aspek layar</td>
523      <td>
524        <code>long</code><br/>
525        <code>notlong</code>
526      </td>
527      <td>
528        <ul class="nolist">
529          <li>{@code long}: Layar panjang, seperti WQVGA, WVGA, FWVGA</li>
530          <li>{@code notlong}: Layar tidak panjang, seperti QVGA, HVGA, dan VGA</li>
531        </ul>
532        <p><em>Ditambahkan dalam API level 4.</em></p>
533        <p>Ini berdasarkan sepenuhnya pada rasio aspek layar (layar "panjang" lebih lebar). Ini
534tidak ada kaitannya dengan orientasi layar.</p>
535        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
536 yang menunjukkan apakah layar panjang.</p>
537      </td>
538    </tr>
539    <tr id="OrientationQualifier">
540      <td>Orientasi layar</td>
541      <td>
542        <code>port</code><br/>
543        <code>land</code>  <!-- <br/>
544        <code>square</code>  -->
545      </td>
546      <td>
547        <ul class="nolist">
548          <li>{@code port}: Perangkat dalam orientasi potret (vertikal)</li>
549          <li>{@code land}: Perangkat dalam orientasi lanskap (horizontal)</li>
550          <!-- Square mode is currently not used. -->
551        </ul>
552        <p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar
553layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
554 informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
555        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation},
556yang menunjukkan orientasi perangkat saat ini.</p>
557      </td>
558    </tr>
559    <tr id="UiModeQualifier">
560      <td>Mode UI</td>
561      <td>
562        <code>car</code><br/>
563        <code>desk</code><br/>
564        <code>television</code><br/>
565        <code>appliance</code>
566        <code>watch</code>
567      </td>
568      <td>
569        <ul class="nolist">
570          <li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li>
571          <li>{@code desk}: Perangkat sedang menampilkan di dudukan perangkat di meja</li>
572          <li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan
573pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna,
574terutama diorientasikan seputar DPAD atau
575interaksi non-pointer lainnya</li>
576          <li>{@code appliance}: Perangkat berlaku sebagai
577alat, tanpa tampilan</li>
578          <li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li>
579        </ul>
580        <p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p>
581        <p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan
582ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan
583dan Memantau Kondisi dan Tipe Dudukan</a>.</p>
584        <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di
585dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link
586android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
587informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
588      </td>
589    </tr>
590    <tr id="NightQualifier">
591      <td>Mode malam</td>
592      <td>
593        <code>night</code><br/>
594        <code>notnight</code>
595      </td>
596      <td>
597        <ul class="nolist">
598          <li>{@code night}: Waktu malam</li>
599          <li>{@code notnight}: Waktu siang</li>
600        </ul>
601        <p><em>Ditambahkan dalam API level 8.</em></p>
602        <p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam
603mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari.  Anda dapat mengaktifkan
604atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi
605aplikasi Anda selama runtime.</p>
606      </td>
607    </tr>
608    <tr id="DensityQualifier">
609      <td>Densitas piksel layar (dpi)</td>
610      <td>
611        <code>ldpi</code><br/>
612        <code>mdpi</code><br/>
613        <code>hdpi</code><br/>
614        <code>xhdpi</code><br/>
615        <code>xxhdpi</code><br/>
616        <code>xxxhdpi</code><br/>
617        <code>nodpi</code><br/>
618        <code>tvdpi</code>
619      </td>
620      <td>
621        <ul class="nolist">
622          <li>{@code ldpi}: Layar densitas rendah; sekitar 120 dpi.</li>
623          <li>{@code mdpi}: Layar densitas sedang (pada HVGA tradisional); sekitar 160 dpi.
624</li>
625          <li>{@code hdpi}: Layar densitas tinggi; sekitar 240 dpi.</li>
626          <li>{@code xhdpi}: Layar densitas ekstra tinggi; sekitar 320 dpi. <em>Ditambahkan dalam API
627Level 8.</em></li>
628          <li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API
629Level 16.</em></li>
630          <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
631lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a>
632 dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API
633Level 18.</em></li>
634          <li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda
635skalakan agar sama dengan densitas perangkat.</li>
636          <li>{@code tvdpi}: Layar antara mdpi dan hdpi; sekitar 213 dpi. Ini
637tidak dianggap sebagai kelompok densitas "utama". Sebagian besar ditujukan untuk televisi dan kebanyakan
638aplikasi tidak memerlukannya &mdash;asalkan sumber daya mdpi dan hdpi cukup untuk sebagian besar aplikasi dan
639sistem akan menskalakan sebagaimana mestinya. Qualifier ini diperkenalkan pada API level 13.</li>
640        </ul>
641        <p>Terdapat rasio skala 3:4:6:8:12:16 antara enam densitas utama (dengan mengabaikan densitas
642tvdpi). Jadi bitmap 9x9 di ldpi adalah 12x12 di mdpi, 18x18 di hdpi, 24x24 di xhdpi dan seterusnya.
643</p>
644        <p>Jika Anda memutuskan bahwa sumber daya gambar tidak terlihat cukup baik di televisi
645atau perangkat tertentu lainnya dan ingin mencoba sumber daya tvdpi, faktor skalanya adalah 1,33*mdpi. Misalnya,
646gambar 100px x 100px untuk layar mdpi harus 133px x 133px untuk tvdpi.</p>
647        <p class="note"><strong>Catatan:</strong> Menggunakan qualifier densitas tidak berarti bahwa
648sumber daya <em>hanya</em> untuk layar dengan ukuran itu saja. Jika Anda tidak menyediakan sumber
649daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya
650mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
651        <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
652Layar</a> untuk informasi selengkapnya tentang cara menangani densitas layar yang berbeda dan cara Android
653menurunkan skala bitmap Anda agar sesuai dengan densitas saat ini.</p>
654       </td>
655    </tr>
656    <tr id="TouchscreenQualifier">
657      <td>Tipe layar sentuh</td>
658      <td>
659        <code>notouch</code><br/>
660        <code>finger</code>
661      </td>
662      <td>
663        <ul class="nolist">
664          <li>{@code notouch}: Perangkat tidak memiliki layar sentuh.</li>
665          <li>{@code finger}: Perangkat memiliki layar sentuh yang dimaksudkan untuk
666digunakan melalui interaksi dengan jari pengguna.</li>
667        </ul>
668        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#touchscreen}, yang
669menunjukkan tipe layar sentuh pada perangkat.</p>
670      </td>
671    </tr>
672    <tr id="KeyboardAvailQualifier">
673      <td>Ketersediaan keyboard</td>
674      <td>
675        <code>keysexposed</code><br/>
676        <code>keyshidden</code><br/>
677        <code>keyssoft</code>
678      </td>
679      <td>
680        <ul class="nolist">
681          <li>{@code keysexposed}: Perangkat menyediakan keyboard. Jika perangkat mengaktifkan
682keyboard perangkat lunak (kemungkinan), ini dapat digunakan bahkan saat keyboard fisik
683<em>tidak</em> diekspos kepada pengguna, meskipun perangkat tidak memiliki keyboard fisik. Jika keyboard
684perangkat lunak tidak disediakan atau dinonaktifkan, maka ini hanya digunakan bila
685keyboard fisik diekspos.</li>
686          <li>{@code keyshidden}: Perangkat memiliki keyboard fisik yang tersedia
687tetapi tersembunyi <em>dan</em> perangkat <em>tidak</em> mengaktifkan keyboard perangkat lunak.</li>
688          <li>{@code keyssoft}: Perangkat mengaktifkan keyboard perangkat lunak,
689baik itu terlihat maupun tidak.</li>
690        </ul>
691        <p>Jika Anda menyediakan sumber daya <code>keysexposed</code>, namun bukan sumber daya <code>keyssoft</code>
692, sistem akan menggunakan sumber daya <code>keysexposed</code> baik keyboard
693terlihat atau tidak, asalkan sistem telah mengaktifkan keyboard perangkat lunak.</p>
694        <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna membuka keyboard
695fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana
696hal ini memengaruhi aplikasi Anda selama runtime.</p>
697        <p>Lihat juga bidang konfigurasi {@link
698android.content.res.Configuration#hardKeyboardHidden} dan {@link
699android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas
700keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p>
701      </td>
702    </tr>
703    <tr id="ImeQualifier">
704      <td>Metode input teks utama</td>
705      <td>
706        <code>nokeys</code><br/>
707        <code>qwerty</code><br/>
708        <code>12key</code>
709      </td>
710      <td>
711        <ul class="nolist">
712          <li>{@code nokeys}: Perangkat tidak memiliki tombol fisik untuk input teks.</li>
713          <li>{@code qwerty}: Perangkat memiliki keyboard fisik qwerty, baik terlihat maupun tidak pada
714pengguna
715.</li>
716          <li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak
717pada pengguna.</li>
718        </ul>
719        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard},
720yang menunjukkan metode utama input teks yang tersedia.</p>
721      </td>
722    </tr>
723    <tr id="NavAvailQualifier">
724      <td>Ketersediaan tombol navigasi</td>
725      <td>
726        <code>navexposed</code><br/>
727        <code>navhidden</code>
728      </td>
729      <td>
730        <ul class="nolist">
731          <li>{@code navexposed}: Tombol navigasi tersedia bagi pengguna.</li>
732          <li>{@code navhidden}: Tombol navigasi tidak tersedia (misalnya di balik penutup yang
733ditutup).</li>
734        </ul>
735        <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menyingkap tombol
736navigasi. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
737informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
738        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigationHidden}, yang menunjukkan
739apakah tombol navigasi disembunyikan.</p>
740      </td>
741    </tr>
742    <tr id="NavigationQualifier">
743      <td>Metode navigasi non-sentuh utama</td>
744      <td>
745        <code>nonav</code><br/>
746        <code>dpad</code><br/>
747        <code>trackball</code><br/>
748        <code>wheel</code>
749      </td>
750      <td>
751        <ul class="nolist">
752          <li>{@code nonav}: Perangkat tidak memiliki fasilitas navigasi selain menggunakan
753layar sentuh.</li>
754          <li>{@code dpad}: Perangkat memiliki pad pengarah (directional pad / d-pad) untuk navigasi.</li>
755          <li>{@code trackball}: Perangkat memiliki trackball untuk navigasi.</li>
756          <li>{@code wheel}: Perangkat memiliki roda pengarah (directional wheel) untuk navigasi (tidak umum).</li>
757        </ul>
758        <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigation},
759yang menunjukkan tipe metode navigasi yang tersedia.</p>
760      </td>
761    </tr>
762<!-- DEPRECATED
763    <tr>
764      <td>Screen dimensions</td>
765      <td>Examples:<br/>
766        <code>320x240</code><br/>
767        <code>640x480</code><br/>
768        etc.
769      </td>
770      <td>
771        <p>The larger dimension must be specified first. <strong>This configuration is deprecated
772and should not be used</strong>. Instead use "screen size," "wider/taller screens," and "screen
773orientation" described above.</p>
774      </td>
775    </tr>
776-->
777    <tr id="VersionQualifier">
778      <td>Versi Platform (level API)</td>
779      <td>Contoh:<br/>
780        <code>v3</code><br/>
781        <code>v4</code><br/>
782        <code>v7</code><br/>
783        dll.</td>
784      <td>
785        <p>Level API yang didukung perangkat. Misalnya, <code>v1</code> untuk API level
7861 (perangkat dengan Android 1.0 atau yang lebih tinggi) dan <code>v4</code> untuk API level 4 (perangkat dengan Android
7871.6 atau yang lebih tinggi). Lihat dokumen <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Level API Android</a> untuk informasi selengkapnya
788tentang nilai-nilai ini.</p>
789      </td>
790    </tr>
791</table>
792
793
794<p class="note"><strong>Catatan:</strong> Sebagian qualifier konfigurasi telah ditambahkan sejak Android
7951.0, jadi tidak semua versi Android mendukung semua qualifier. Menggunakan qualifier baru secara implisit
796akan menambahkan qualifier versi platform sehingga perangkat yang lebih lama pasti mengabaikannya. Misalnya, menggunakan qualifier
797<code>w600dp</code> secara otomatis akan menyertakan qualifier <code>v13</code>, karena
798qualifier lebar yang tersedia baru di API level 13. Untuk menghindari masalah, selalu sertakan satu set
799sumber daya default (satu set sumber daya <em>tanpa qualifier</em>). Untuk informasi selengkapnya, lihat
800bagian tentang <a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan
801Sumber Daya</a>.</p>
802
803
804
805<h3 id="QualifierRules">Aturan penamaan qualifier</h3>
806
807<p>Inilah beberapa aturan tentang penggunaan nama qualifier konfigurasi:</p>
808
809<ul>
810    <li>Anda bisa menetapkan beberapa qualifier untuk satu set sumber daya, yang dipisahkan dengan tanda hubung. Misalnya,
811<code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi
812lanskap.</li>
813    <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>.
814Misalnya:
815      <ul>
816        <li>Salah: <code>drawable-hdpi-port/</code></li>
817        <li>Benar: <code>drawable-port-hdpi/</code></li>
818      </ul>
819    </li>
820    <li>Direktori sumber daya alternatif tidak bisa digunakan. Misalnya, Anda tidak bisa memiliki
821<code>res/drawable/drawable-en/</code>.</li>
822    <li>Nilai tidak membedakan huruf besar maupun kecil.  Compiler sumber daya mengubah nama direktori
823menjadi huruf kecil sebelum pemrosesan untuk menghindari masalah pada sistem file yang membedakan
824huruf kecil dan besar. Setiap penggunaan huruf besar dalam nama hanyalah demi keterbacaan.</li>
825    <li>Hanya didukung satu nilai untuk setiap tipe qualifier. Misalnya, jika Anda ingin menggunakan
826file drawable yang sama untuk Spanyol dan Prancis, Anda <em>tidak bisa</em> memiliki direktori bernama
827<code>drawable-rES-rFR/</code>. Sebagai gantinya, Anda perlu dua direktori sumber daya, seperti
828<code>drawable-rES/</code> dan <code>drawable-rFR/</code>, berisi file yang sesuai.
829Akan tetapi, Anda tidak harus benar-benar menggandakan file yang sama di kedua lokasi. Sebagai gantinya, Anda
830bisa membuat alias ke satu sumber daya. Lihat <a href="#AliasResources">Membuat
831sumber daya alias</a> di bawah ini.</li>
832</ul>
833
834<p>Setelah Anda menyimpan sumber daya alternatif ke dalam direktori yang diberi nama dengan
835qualifier ini, Android secara otomatis menerapkan sumber daya dalam
836aplikasi Anda berdasarkan pada konfigurasi perangkat saat ini. Setiap kali sumber daya diminta, Android akan memeriksa direktori sumber daya
837alternatif berisi file sumber daya yang diminta, lalu <a href="#BestMatch">mencari sumber daya yang
838paling cocok</a>(dibahas di bawah). Jika tidak ada sumber daya alternatif yang cocok
839dengan konfigurasi perangkat tertentu, Android akan menggunakan sumber daya default terkait (set
840sumber daya untuk tipe sumber daya tertentu yang tidak termasuk qualifier
841konfigurasi).</p>
842
843
844
845<h3 id="AliasResources">Membuat sumber daya alias</h3>
846
847<p>Bila memiliki sumber daya yang ingin Anda gunakan untuk lebih dari satu konfigurasi
848perangkat (namun tidak ingin menyediakannya sebagai sumber daya default), Anda tidak perlu menempatkan sumber daya
849yang sama di lebih dari satu direktori sumber daya alternatif. Sebagai gantinya, (dalam beberapa kasus) Anda bisa membuat
850sumber daya alternatif
851yang berfungsi sebagai alias untuk sumber daya yang disimpan dalam direktori sumber daya default.</p>
852
853<p class="note"><strong>Catatan:</strong> Tidak semua sumber daya menawarkan mekanisme yang memungkinkan Anda
854membuat alias ke sumber daya lain. Khususnya, animasi, menu, raw, dan
855sumber daya lain yang tidak ditetapkan dalam direktori {@code xml/} tidak menawarkan fitur ini.</p>
856
857<p>Misalnya, bayangkan Anda memiliki ikon aplikasi {@code icon.png}, dan membutuhkan versi uniknya
858untuk lokal berbeda. Akan tetapi, dua lokal, bahasa Inggris-Kanada dan bahasa Prancis-Kanada, harus menggunakan
859versi yang sama. Anda mungkin berasumsi bahwa Anda perlu menyalin gambar
860yang sama ke dalam direktori sumber daya baik untuk bahasa Inggris-Kanada maupun bahasa Prancis-Kanada, namun
861bukan demikian. Sebagai gantinya, Anda bisa menyimpan gambar yang sama-sama digunakan sebagai {@code icon_ca.png} (nama
862apa saja selain {@code icon.png}) dan memasukkannya
863dalam direktori default {@code res/drawable/}. Lalu buat file {@code icon.xml} dalam {@code
864res/drawable-en-rCA/} dan {@code res/drawable-fr-rCA/} yang mengacu ke sumber daya {@code icon_ca.png}
865yang menggunakan elemen {@code &lt;bitmap&gt;}. Hal ini memungkinkan Anda menyimpan satu versi saja dari
866file PNG dan dua file XML kecil yang menunjuk ke sana. (Contoh file XML ditampilkan di bawah.)</p>
867
868
869<h4>Drawable</h4>
870
871<p>Untuk membuat alias ke drawable yang ada, gunakan elemen {@code &lt;bitmap&gt;}.
872Misalnya:</p>
873
874<pre>
875&lt;?xml version="1.0" encoding="utf-8"?>
876&lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
877    android:src="@drawable/icon_ca" />
878</pre>
879
880<p>Jika Anda menyimpan file ini sebagai {@code icon.xml} (dalam direktori sumber daya alternatif, seperti
881{@code res/drawable-en-rCA/}), maka file akan dikompilasi menjadi sumber daya yang dapat Anda acu
882sebagai {@code R.drawable.icon}, namun sebenarnya merupakan alias untuk sumber daya {@code
883R.drawable.icon_ca} (yang disimpan dalam {@code res/drawable/}).</p>
884
885
886<h4>Layout</h4>
887
888<p>Untuk membuat alias ke layout yang ada, gunakan elemen {@code &lt;include&gt;},
889yang dibungkus dalam {@code &lt;merge&gt;}. Misalnya:</p>
890
891<pre>
892&lt;?xml version="1.0" encoding="utf-8"?>
893&lt;merge>
894    &lt;include layout="@layout/main_ltr"/>
895&lt;/merge>
896</pre>
897
898<p>Jika Anda menyimpan file ini sebagai {@code main.xml}, file akan dikompilasi menjadi sumber daya yang dapat Anda acu
899sebagai {@code R.layout.main}, namun sebenarnya merupakan alias untuk sumber daya {@code R.layout.main_ltr}
900.</p>
901
902
903<h4>String dan nilai-nilai sederhana lainnya</h4>
904
905<p>Untuk membuat alias ke string yang ada, cukup gunakan ID sumber daya
906dari string yang diinginkan sebagai nilai untuk string baru. Misalnya:</p>
907
908<pre>
909&lt;?xml version="1.0" encoding="utf-8"?>
910&lt;resources>
911    &lt;string name="hello">Hello&lt;/string>
912    &lt;string name="hi">@string/hello&lt;/string>
913&lt;/resources>
914</pre>
915
916<p>Sumber daya {@code R.string.hi} sekarang merupakan alias untuk {@code R.string.hello}.</p>
917
918<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">Nilai sederhana lainnya</a> sama
919cara kerjanya. Misalnya, sebuah warna:</p>
920
921<pre>
922&lt;?xml version="1.0" encoding="utf-8"?>
923&lt;resources>
924    &lt;color name="yellow">#f00&lt;/color>
925    &lt;color name="highlight">@color/red&lt;/color>
926&lt;/resources>
927</pre>
928
929
930
931
932<h2 id="Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</h2>
933
934<p>Agar aplikasi Anda mendukung beberapa konfigurasi perangkat,
935Anda harus selalu menyediakan sumber daya default untuk setiap tipe sumber daya yang menggunakan aplikasi Anda.</p>
936
937<p>Misalnya, jika aplikasi Anda mendukung beberapa bahasa, sertakan selalu direktori {@code
938values/} (tempat string Anda disimpan) <em>tanpa</em> <a href="#LocaleQualifier">qualifier bahasa dan wilayah</a>. Jika sebaliknya Anda menempatkan semua file
939string dalam direktori yang memiliki qualifier bahasa dan wilayah, maka aplikasi Anda akan crash saat berjalan
940pada perangkat yang telah diatur ke bahasa yang tidak didukung string Anda. Namun asalkan Anda menyediakan sumber daya default
941{@code values/}, aplikasi akan berjalan lancar (meskipun pengguna
942tidak memahami bahasa itu&mdash;, ini lebih baik daripada crash).</p>
943
944<p>Demikian pula, jika Anda menyediakan sumber daya layout berbeda berdasarkan orientasi layar, Anda harus
945memilih satu orientasi sebagai default. Misalnya, sebagai ganti menyediakan sumber daya dalam {@code
946layout-land/} untuk lanskap dan {@code layout-port/} untuk potret, biarkan salah satu sebagai default, seperti
947{@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p>
948
949<p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada
950konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan
951qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru,
952namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama
953Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi
954tidak bisa menggunakan sumber daya yang dinamai dengan qualifier baru. Misalnya, jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
955minSdkVersion}</a> Anda diatur ke 4, dan Anda memenuhi syarat semua sumber daya drawable dengan menggunakan <a href="#NightQualifier">mode malam</a> ({@code night} atau {@code notnight}, yang ditambahkan di API
956Level 8), maka perangkat API level 4 tidak bisa mengakses sumber daya drawable dan akan crash. Dalam hal
957ini, Anda mungkin ingin {@code notnight} menjadi sumber daya default, jadi Anda harus mengecualikan
958qualifier itu agar sumber daya drawable Anda ada dalam {@code drawable/} atau {@code drawable-night/}.</p>
959
960<p>Jadi, agar bisa menyediakan kompatibilitas perangkat terbaik, sediakan selalu sumber daya
961default untuk sumber daya yang diperlukan aplikasi Anda untuk berjalan dengan benar. Selanjutnya buatlah sumber daya
962alternatif untuk konfigurasi perangkat tertentu dengan menggunakan qualifier konfigurasi.</p>
963
964<p>Ada satu eksepsi untuk aturan ini: Jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> aplikasi Anda adalah 4 atau
965lebih, Anda <em>tidak</em> memerlukan sumber daya drawable default saat menyediakan sumber daya
966drawable alternatif dengan qualifier <a href="#DensityQualifier">densitas layar</a>. Tanpa sumber daya
967drawable default sekali pun, Android bisa menemukan yang paling cocok di antara densitas layar alternatif dan menskalakan
968bitmap sesuai kebutuhan. Akan tetapi, demi pengalaman terbaik pada semua jenis perangkat, Anda harus
969menyediakan drawable alternatif untuk ketiga tipe densitas.</p>
970
971
972
973<h2 id="BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</h2>
974
975<p>Saat Anda meminta sumber daya yang Anda berikan alternatifnya, Android akan memilih
976sumber daya alternatif yang akan digunakan saat runtime, bergantung pada konfigurasi perangkat saat ini. Untuk
977mendemonstrasikan cara Android memilih sumber daya alternatif, anggaplah direktori drawable berikut
978masing-masing berisi versi berbeda dari gambar yang sama:</p>
979
980<pre class="classic no-pretty-print">
981drawable/
982drawable-en/
983drawable-fr-rCA/
984drawable-en-port/
985drawable-en-notouch-12key/
986drawable-port-ldpi/
987drawable-port-notouch-12key/
988</pre>
989
990<p>Dan anggaplah yang berikut ini merupakan konfigurasi perangkatnya:</p>
991
992<p style="margin-left:1em;">
993Lokal = <code>en-GB</code> <br/>
994Orientasi layar = <code>port</code> <br/>
995Densitas piksel layar = <code>hdpi</code> <br/>
996Tipe layar sentuh = <code>notouch</code> <br/>
997Metode input teks utama = <code>12key</code>
998</p>
999
1000<p>Dengan membandingkan konfigurasi perangkat dengan sumber daya alternatif yang tersedia, Android akan memilih
1001drawable dari {@code drawable-en-port}.</p>
1002
1003<p>Sistem akan menentukan keputusannya mengenai sumber daya yang akan digunakan dengan logika
1004berikut:</p>
1005
1006
1007<div class="figure" style="width:371px">
1008<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" />
1009<p class="img-caption"><strong>Gambar 2.</strong> Bagan alur cara Android menemukan
1010sumber daya yang paling cocok.</p>
1011</div>
1012
1013
1014<ol>
1015  <li>Menghapus file sumber daya yang bertentangan dengan konfigurasi perangkat.
1016    <p>Direktori <code>drawable-fr-rCA/</code> dihapus karena bertentangan
1017dengan lokal <code>en-GB</code>.</p>
1018<pre class="classic no-pretty-print">
1019drawable/
1020drawable-en/
1021<strike>drawable-fr-rCA/</strike>
1022drawable-en-port/
1023drawable-en-notouch-12key/
1024drawable-port-ldpi/
1025drawable-port-notouch-12key/
1026</pre>
1027<p class="note"><strong>Eksepsi:</strong> Densitas piksel layar adalah satu qualifier yang
1028tidak dihapus karena bertentangan. Meskipun densitas layar perangkat adalah hdpi,
1029<code>drawable-port-ldpi/</code> tidak dihapus karena setiap densitas layar
1030dianggap cocok untuk saat ini. Informasi selengkapnya tersedia dalam dokumen <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
1031Layar</a>.</p></li>
1032
1033  <li>Pilih qualifier berkedudukan tertinggi (berikutnya) dalam daftar (<a href="#table2">tabel 2</a>).
1034(Mulai dengan MCC, lalu pindah ke bawah.) </li>
1035  <li>Apakah salah satu direktori sumber daya menyertakan qualifier ini?  </li>
1036    <ul>
1037      <li>Jika Tidak, kembali ke langkah 2 dan lihat qualifier berikutnya. (Dalam contoh,
1038jawabannya adalah "tidak" hingga qualifier bahasa tercapai.)</li>
1039      <li>Jika Ya, lanjutkan ke langkah 4.</li>
1040    </ul>
1041  </li>
1042
1043  <li>Hapus direktori sumber daya yang tidak menyertakan qualifier ini. Dalam contoh, sistem
1044menghapus semua direktori yang tidak menyertakan qualifier bahasa:</li>
1045<pre class="classic no-pretty-print">
1046<strike>drawable/</strike>
1047drawable-en/
1048drawable-en-port/
1049drawable-en-notouch-12key/
1050<strike>drawable-port-ldpi/</strike>
1051<strike>drawable-port-notouch-12key/</strike>
1052</pre>
1053<p class="note"><strong>Eksepsi:</strong> Jika qualifier yang dimaksud adalah densitas piksel layar,
1054Android akan memilih opsi yang paling cocok dengan densitas layar perangkat.
1055Secara umum, Android lebih suka menurunkan skala gambar asli yang lebih besar daripada menaikkan skala
1056atas gambar asli yang lebih kecil. Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
1057Layar</a>.</p>
1058  </li>
1059
1060  <li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi
1061layar adalah qualifier berikutnya yang memiliki kecocokan.
1062Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus:
1063<pre class="classic no-pretty-print">
1064<strike>drawable-en/</strike>
1065drawable-en-port/
1066<strike>drawable-en-notouch-12key/</strike>
1067</pre>
1068<p>Direktori yang tersisa adalah {@code drawable-en-port}.</p>
1069  </li>
1070</ol>
1071
1072<p>Meskipun prosedur dijalankan untuk setiap sumber daya yang diminta, sistem akan mengoptimalkan beberapa aspek
1073lebih lanjut. Satu optimalisasi tersebut adalah bahwa setelah konfigurasi perangkat diketahui, sistem mungkin
1074akan menghapus sumber daya alternatif yang sama sekali tidak cocok. Misalnya, jika bahasa konfigurasi
1075adalah bahasa Inggris ("en"), maka setiap direktori sumber daya yang memiliki qualifier bahasa akan diatur ke
1076selain bahasa Inggris tidak akan pernah disertakan dalam pool sumber daya yang diperiksa (meskipun
1077direktori sumber daya <em>tanpa</em> qualifier bahasa masih disertakan).</p>
1078
1079<p>Saat memilih sumber daya berdasarkan qualifier ukuran layar, sistem akan menggunakan
1080sumber daya yang didesain untuk layar yang lebih kecil daripada layar saat ini jika tidak ada sumber daya yang lebih cocok
1081(misalnya, layar ukuran besar akan menggunakan sumber daya layar ukuran normal jika diperlukan). Akan tetapi,
1082jika satu-satunya sumber daya yang tersedia <em>lebih besar</em> daripada layar saat ini, sistem
1083<strong>tidak</strong> akan menggunakannya dan aplikasi Anda akan crash jika tidak ada sumber daya lain yang cocok dengan konfigurasi
1084perangkat (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code xlarge},
1085namun perangkat memiliki ukuran layar normal).</p>
1086
1087<p class="note"><strong>Catatan:</strong> <em>Kedudukan</em> qualifier (dalam <a href="#table2">tabel 2</a>) lebih penting
1088daripada jumlah qualifier yang benar-benar pas dengan perangkat. Misalnya, dalam langkah 4 di atas, pilihan
1089terakhir pada daftar berisi tiga qualifier yang bebar-benar cocok dengan perangkat (orientasi, tipe
1090layar sentuh, dan metode input), sementara <code>drawable-en</code> hanya memiliki satu parameter yang cocok
1091(bahasa). Akan tetapi, bahasa memiliki kedudukan lebih tinggi dari pada qualifier lainnya, sehingga
1092<code>drawable-port-notouch-12key</code> tidak masuk.</p>
1093
1094<p>Untuk mengetahui selengkapnya tentang cara menggunakan sumber daya dalam aplikasi, lanjutkan ke <a href="accessing-resources.html">Mengakses Sumber Daya</a>.</p>
1095