1 page.title=Menyediakan Sumber Daya 2 parent.title=Sumber Daya Aplikasi 3 parent.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 13 konfigurasi 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 33 Layar</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 40 konfigurasi perangkat tertentu, dengan mengelompokkannya dalam direktori sumber daya bernama khusus. Saat 41 runtime, Android menggunakan sumber daya yang sesuai berdasarkan konfigurasi saat ini. Misalnya, Anda mungkin 42 ingin menyediakan layout UI berbeda bergantung pada ukuran layar atau string berbeda bergantung pada 43 pengaturan bahasa.</p> 44 45 <p>Setelah mengeksternalkan sumber daya aplikasi, Anda dapat mengaksesnya menggunakan 46 ID sumber daya yang dibuat dalam kelas {@code R} proyek Anda. Cara menggunakan 47 sumber daya dalam aplikasi dibahas dalam <a href="accessing-resources.html">Mengakses 48 Sumber Daya</a>. Dokumen ini menampilkan cara mengelompokkan sumber daya 49 dalam 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"> 58 MyProject/ 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 74 subdirektori): sumber daya gambar, dua sumber daya layout, direktori {@code mipmap/} untuk ikon 75 launcher, dan satu file sumber daya string. Nama direktori 76 sumber 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 82 didukung 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 93 properti</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 99 tween</a>. (Animasi properti juga dapat disimpan dalam direktori ini, namun 100 direktori {@code animator/} lebih disukai bagi animasi properti agar kedua tipe 101 ini 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 107 Daftar 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 114 dikompilasi 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 143 Menu. 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) 150 Resources.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 152 untuk menyimpan beberapa sumber daya dalam direktori {@code 153 assets/} (sebagai ganti {@code res/raw/}). File dalam {@code assets/} tidak diberi 154 ID 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 161 berdasarkan nama file XML, file dalam direktori {@code values/} menggambarkan beberapa sumber daya. 162 Untuk file dalam direktori ini, setiap anak elemen {@code <resources>} mendefinisikan satu sumber 163 daya. Misalnya, elemen {@code <string>} membuat sumber daya 164 {@code R.string} dan elemen {@code <color>} 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 167 ini dan menempatkan tipe sumber daya berbeda dalam satu file. Akan tetapi, agar jelas, Anda mungkin 168 perlu menempatkan tipe sumber daya unik dalam file berbeda. Misalnya, berikut ini adalah beberapa ketentuan 169 penamaan 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 175 string</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 187 android.content.res.Resources#getXml(int) Resources.getXML()}. Berbagai file konfigurasi XML 188 harus 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 194 direktori {@code res/}— 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. 200 Akan tetapi, beberapa tipe perangkat berbasis Android mungkin memanggil tipe sumber daya yang berbeda. 201 Misalnya, jika perangkat memiliki layar yang lebih besar daripada layar normal, maka Anda harus 202 menyediakan sumber daya layout berbeda yang memanfaatkan ruang layar yang lebih besar. Atau, jika perangkat 203 memiliki pengaturan bahasa berbeda, maka Anda harus menyediakan sumber daya string berbeda yang menerjemahkan teks dalam 204 antarmuka pengguna Anda. Untuk menyediakan sumber daya berbeda ini bagi 205 konfigurasi perangkat yang berbeda, Anda harus menyediakan sumber daya alternatif, selain sumber 206 daya 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 219 perangkat tertentu. Misalnya, Anda harus menyertakan sumber daya drawable alternatif untuk densitas layar 220 berbeda dan sumber daya string alternatif untuk bahasa yang berbeda. Saat runtime, Android 221 akan mendeteksi konfigurasi perangkat aktif dan memuat 222 sumber 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><resources_name></em>-<em><config_qualifier></em>}. 228 <ul> 229 <li><em>{@code <resources_name>}</em> adalah nama direktori dari sumber daya default 230 terkait (didefinisikan dalam tabel 1).</li> 231 <li><em>{@code <qualifier>}</em> adalah nama yang menetapkan konfigurasi individu 232 yang akan digunakan sumber daya ini (didefinisikan dalam tabel 2).</li> 233 </ul> 234 <p>Anda bisa menambahkan lebih dari satu <em>{@code <qualifier>}</em>. Pisahkan masing-masing 235 dengan tanda hubung.</p> 236 <p class="caution"><strong>Perhatian:</strong> Saat menambahkan beberapa qualifier, Anda 237 harus menempatkannya dalam urutan yang sama dengan yang tercantum dalam tabel 2. Jika urutan qualifier 238 salah, sumber daya akan diabaikan.</p> 239 </li> 240 <li>Simpan masing-masing sumber daya alternatif dalam direktori baru ini. File sumber daya harus dinamai 241 sama 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"> 247 res/ 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 257 layar densitas tinggi. Gambar di masing-masing direktori drawable memiliki ukuran untuk densitas layar 258 tertentu, namun nama filenya persis 259 sama. Dengan demikian, ID sumber daya yang Anda gunakan untuk mengacu gambar {@code icon.png} atau @code 260 background.png} selalu sama, namun Android memilih 261 versi masing-masing sumber daya yang paling cocok dengan perangkat saat ini, dengan membandingkan informasi konfigurasi 262 perangkat dengan qualifier dalam nama direktori sumber daya.</p> 263 264 <p>Android mendukung beberapa qualifier konfigurasi dan Anda dapat 265 menambahkan beberapa qualifier ke satu nama direktori, dengan memisahkan setiap qualifier dengan tanda hubung. Tabel 2 266 berisi daftar qualifier konfigurasi yang valid, dalam urutan prioritas—jika Anda menggunakan beberapa 267 qualifier sebagai direktori sumber daya, Anda harus menambahkannya ke nama direktori sesuai urutan 268 yang tercantum dalam tabel.</p> 269 270 271 <p class="table-caption" id="table2"><strong>Tabel 2.</strong> Nama-nama 272 qualifier 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 291 Orange.</p> 292 <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal 293 dari kartu SIM.</p> 294 <p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal 295 spesifik 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 297 MNC, Anda harus melakukannya dengan hati-hati dan menguji apakah qualifier itu berjalan sesuai harapan.</p> 298 <p>Lihat juga bidang konfigurasi {@link 299 android.content.res.Configuration#mcc}, dan {@link 300 android.content.res.Configuration#mnc}, yang masing-masing menunjukkan kode negara seluler saat ini 301 dan 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 315 639-1</a>, bisa juga diikuti dengan kode wilayah 316 dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO 317 3166-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 320 membedakan bagian wilayah. 321 Anda tidak bisa menetapkan wilayah saja.</p> 322 <p>Ini bisa berubah selama masa pakai 323 aplikasi Anda jika pengguna mengubah bahasanya dalam pengaturan sistem. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang 324 bagaimana hal ini dapat memengaruhi aplikasi Anda selama runtime.</p> 325 <p>Lihat <a href="localization.html">Pelokalan</a> untuk panduan lengkap melokalkan 326 aplikasi Anda ke bahasa lain.</p> 327 <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#locale} yang menunjukkan 328 bahasa 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 342 layout 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"> 345 res/ 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 356 layout 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<N>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 372 yang tersedia. Secara spesifik, smallestWidth perangkat adalah yang terpendek dari 373 tinggi dan lebar layar yang tersedia (Anda dapat menganggapnya sebagai "lebar terkecil yang memungkinkan" untuk layar). Anda bisa 374 menggunakan qualifier ini untuk memastikan bahwa, apa pun orientasi layar saat ini, aplikasi 375 Anda memiliki paling tidak {@code <N>} dps dari lebar yang tersedia untuk UI-nya.</p> 376 <p>Misalnya, jika layout mengharuskan dimensi layar terkecilnya setiap saat paling tidak 377 600 dp, maka Anda dapat menggunakan qualifer ini untuk membuat sumber daya layout, {@code 378 res/layout-sw600dp/}. Sistem akan menggunakan sumber daya ini hanya bila dimensi layar terkecil yang 379 tersedia paling tidak 600 dp, tanpa mempertimbangkan apakah sisi 600 dp adalah tinggi atau 380 lebar yang dipersepsikan pengguna. SmallestWidth adalah karakteristik ukuran layar tetap dari perangkat; <strong>smallestWidth 381 perangkat 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 384 sumbu smallestWidth, sistem akan mendeklarasikan smallestWidth lebih kecil daripada ukuran layar sebenarnya, 385 karena itu adalah piksel layar yang tidak tersedia untuk UI Anda. Sehingga nilai yang Anda 386 gunakan 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 402 qualifier smallestWidth terkecil, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi) 403 smallestWidth 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 406 android:requiresSmallestWidthDp}</a>, yang mendeklarasikan smallestWidth minimum yang 407 kompatibel dengan aplikasi Anda, dan bidang konfigurasi {@link 408 android.content.res.Configuration#smallestScreenWidthDp}, yang menyimpan nilai 409 smallestWidth perangkat.</p> 410 <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan 411 qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung 412 Multi Layar</a>.</p> 413 </td> 414 </tr> 415 <tr id="ScreenWidthQualifier"> 416 <td>Lebar yang tersedia</td> 417 <td><code>w<N>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 425 menggunakan sumber daya—yang didefinisikan oleh nilai <code><N></code>. Nilai konfigurasi ini 426 akan berubah bila orientasi 427 berubah 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 431 di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa 432 elemen UI persisten di tepi kiri atau kanan, layar 433 menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan 434 elemen 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 439 qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung 440 Multi Layar</a>.</p> 441 </td> 442 </tr> 443 <tr id="ScreenHeightQualifier"> 444 <td>Tinggi yang tersedia</td> 445 <td><code>h<N>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 453 sumber daya —bersama nilai yang didefinisikan oleh <code><N></code>. Nilai konfigurasi ini 454 akan berubah saat orientasi 455 berubah 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 459 di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa 460 elemen UI persisten di tepi atas atau bawah, layar akan 461 menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan 462 elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi 463 layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa 464 disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula 465 dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan 466 untuk 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 471 qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung 472 Multi 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 486 layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil 487 adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah 488 dan VGA densitas tinggi.</li> 489 <li>{@code normal}: Layar yang berukuran serupa dengan 490 layar HVGA densitas sedang. Ukuran layout minimum untuk 491 layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah 492 WQVGA densitas rendah, HVGA densitas sedang, WVGA 493 densitas tinggi.</li> 494 <li>{@code large}: Layar yang berukuran serupa dengan 495 layar 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 499 densitas sedang tradisional. Ukuran layout minimum untuk 500 layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar 501 seringkali 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 505 sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber 506 daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya 507 mana saja yang <a href="#BestMatch">paling cocok</a>.</p> 508 <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan 509 qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi 510 Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code 511 xlarge}, 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 515 Layar</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 518 besar.</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 534 tidak 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 553 layar. 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}, 556 yang 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 573 pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna, 574 terutama diorientasikan seputar DPAD atau 575 interaksi non-pointer lainnya</li> 576 <li>{@code appliance}: Perangkat berlaku sebagai 577 alat, 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 582 ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan 583 dan Memantau Kondisi dan Tipe Dudukan</a>.</p> 584 <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di 585 dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link 586 android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk 587 informasi 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 603 mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari. Anda dapat mengaktifkan 604 atau 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 605 aplikasi 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 627 Level 8.</em></li> 628 <li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API 629 Level 16.</em></li> 630 <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher, 631 lihat <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 633 Level 18.</em></li> 634 <li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda 635 skalakan agar sama dengan densitas perangkat.</li> 636 <li>{@code tvdpi}: Layar antara mdpi dan hdpi; sekitar 213 dpi. Ini 637 tidak dianggap sebagai kelompok densitas "utama". Sebagian besar ditujukan untuk televisi dan kebanyakan 638 aplikasi tidak memerlukannya —asalkan sumber daya mdpi dan hdpi cukup untuk sebagian besar aplikasi dan 639 sistem 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 642 tvdpi). 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 645 atau perangkat tertentu lainnya dan ingin mencoba sumber daya tvdpi, faktor skalanya adalah 1,33*mdpi. Misalnya, 646 gambar 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 648 sumber daya <em>hanya</em> untuk layar dengan ukuran itu saja. Jika Anda tidak menyediakan sumber 649 daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya 650 mana saja yang <a href="#BestMatch">paling cocok</a>.</p> 651 <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa 652 Layar</a> untuk informasi selengkapnya tentang cara menangani densitas layar yang berbeda dan cara Android 653 menurunkan 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 666 digunakan melalui interaksi dengan jari pengguna.</li> 667 </ul> 668 <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#touchscreen}, yang 669 menunjukkan 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 682 keyboard 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 684 perangkat lunak tidak disediakan atau dinonaktifkan, maka ini hanya digunakan bila 685 keyboard fisik diekspos.</li> 686 <li>{@code keyshidden}: Perangkat memiliki keyboard fisik yang tersedia 687 tetapi tersembunyi <em>dan</em> perangkat <em>tidak</em> mengaktifkan keyboard perangkat lunak.</li> 688 <li>{@code keyssoft}: Perangkat mengaktifkan keyboard perangkat lunak, 689 baik 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 693 terlihat atau tidak, asalkan sistem telah mengaktifkan keyboard perangkat lunak.</p> 694 <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna membuka keyboard 695 fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana 696 hal ini memengaruhi aplikasi Anda selama runtime.</p> 697 <p>Lihat juga bidang konfigurasi {@link 698 android.content.res.Configuration#hardKeyboardHidden} dan {@link 699 android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas 700 keyboard 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 714 pengguna 715 .</li> 716 <li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak 717 pada pengguna.</li> 718 </ul> 719 <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard}, 720 yang 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 733 ditutup).</li> 734 </ul> 735 <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menyingkap tombol 736 navigasi. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk 737 informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> 738 <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigationHidden}, yang menunjukkan 739 apakah 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 753 layar 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}, 759 yang 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 772 and should not be used</strong>. Instead use "screen size," "wider/taller screens," and "screen 773 orientation" 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 786 1 (perangkat dengan Android 1.0 atau yang lebih tinggi) dan <code>v4</code> untuk API level 4 (perangkat dengan Android 787 1.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 788 tentang 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 795 1.0, jadi tidak semua versi Android mendukung semua qualifier. Menggunakan qualifier baru secara implisit 796 akan 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 798 qualifier lebar yang tersedia baru di API level 13. Untuk menghindari masalah, selalu sertakan satu set 799 sumber daya default (satu set sumber daya <em>tanpa qualifier</em>). Untuk informasi selengkapnya, lihat 800 bagian tentang <a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan 801 Sumber 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 812 lanskap.</li> 813 <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>. 814 Misalnya: 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 823 menjadi huruf kecil sebelum pemrosesan untuk menghindari masalah pada sistem file yang membedakan 824 huruf 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 826 file 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. 829 Akan tetapi, Anda tidak harus benar-benar menggandakan file yang sama di kedua lokasi. Sebagai gantinya, Anda 830 bisa membuat alias ke satu sumber daya. Lihat <a href="#AliasResources">Membuat 831 sumber 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 835 qualifier ini, Android secara otomatis menerapkan sumber daya dalam 836 aplikasi Anda berdasarkan pada konfigurasi perangkat saat ini. Setiap kali sumber daya diminta, Android akan memeriksa direktori sumber daya 837 alternatif berisi file sumber daya yang diminta, lalu <a href="#BestMatch">mencari sumber daya yang 838 paling cocok</a>(dibahas di bawah). Jika tidak ada sumber daya alternatif yang cocok 839 dengan konfigurasi perangkat tertentu, Android akan menggunakan sumber daya default terkait (set 840 sumber daya untuk tipe sumber daya tertentu yang tidak termasuk qualifier 841 konfigurasi).</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 848 perangkat (namun tidak ingin menyediakannya sebagai sumber daya default), Anda tidak perlu menempatkan sumber daya 849 yang sama di lebih dari satu direktori sumber daya alternatif. Sebagai gantinya, (dalam beberapa kasus) Anda bisa membuat 850 sumber daya alternatif 851 yang 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 854 membuat alias ke sumber daya lain. Khususnya, animasi, menu, raw, dan 855 sumber 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 858 untuk lokal berbeda. Akan tetapi, dua lokal, bahasa Inggris-Kanada dan bahasa Prancis-Kanada, harus menggunakan 859 versi yang sama. Anda mungkin berasumsi bahwa Anda perlu menyalin gambar 860 yang sama ke dalam direktori sumber daya baik untuk bahasa Inggris-Kanada maupun bahasa Prancis-Kanada, namun 861 bukan demikian. Sebagai gantinya, Anda bisa menyimpan gambar yang sama-sama digunakan sebagai {@code icon_ca.png} (nama 862 apa saja selain {@code icon.png}) dan memasukkannya 863 dalam direktori default {@code res/drawable/}. Lalu buat file {@code icon.xml} dalam {@code 864 res/drawable-en-rCA/} dan {@code res/drawable-fr-rCA/} yang mengacu ke sumber daya {@code icon_ca.png} 865 yang menggunakan elemen {@code <bitmap>}. Hal ini memungkinkan Anda menyimpan satu versi saja dari 866 file 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 <bitmap>}. 872 Misalnya:</p> 873 874 <pre> 875 <?xml version="1.0" encoding="utf-8"?> 876 <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 882 sebagai {@code R.drawable.icon}, namun sebenarnya merupakan alias untuk sumber daya {@code 883 R.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 <include>}, 889 yang dibungkus dalam {@code <merge>}. Misalnya:</p> 890 891 <pre> 892 <?xml version="1.0" encoding="utf-8"?> 893 <merge> 894 <include layout="@layout/main_ltr"/> 895 </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 899 sebagai {@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 906 dari string yang diinginkan sebagai nilai untuk string baru. Misalnya:</p> 907 908 <pre> 909 <?xml version="1.0" encoding="utf-8"?> 910 <resources> 911 <string name="hello">Hello</string> 912 <string name="hi">@string/hello</string> 913 </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 919 cara kerjanya. Misalnya, sebuah warna:</p> 920 921 <pre> 922 <?xml version="1.0" encoding="utf-8"?> 923 <resources> 924 <color name="yellow">#f00</color> 925 <color name="highlight">@color/red</color> 926 </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, 935 Anda 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 938 values/} (tempat string Anda disimpan) <em>tanpa</em> <a href="#LocaleQualifier">qualifier bahasa dan wilayah</a>. Jika sebaliknya Anda menempatkan semua file 939 string dalam direktori yang memiliki qualifier bahasa dan wilayah, maka aplikasi Anda akan crash saat berjalan 940 pada 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 942 tidak memahami bahasa itu—, ini lebih baik daripada crash).</p> 943 944 <p>Demikian pula, jika Anda menyediakan sumber daya layout berbeda berdasarkan orientasi layar, Anda harus 945 memilih satu orientasi sebagai default. Misalnya, sebagai ganti menyediakan sumber daya dalam {@code 946 layout-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 950 konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan 951 qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru, 952 namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama 953 Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi 954 tidak bisa menggunakan sumber daya yang dinamai dengan qualifier baru. Misalnya, jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code 955 minSdkVersion}</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 956 Level 8), maka perangkat API level 4 tidak bisa mengakses sumber daya drawable dan akan crash. Dalam hal 957 ini, Anda mungkin ingin {@code notnight} menjadi sumber daya default, jadi Anda harus mengecualikan 958 qualifier 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 961 default untuk sumber daya yang diperlukan aplikasi Anda untuk berjalan dengan benar. Selanjutnya buatlah sumber daya 962 alternatif 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 965 lebih, Anda <em>tidak</em> memerlukan sumber daya drawable default saat menyediakan sumber daya 966 drawable alternatif dengan qualifier <a href="#DensityQualifier">densitas layar</a>. Tanpa sumber daya 967 drawable default sekali pun, Android bisa menemukan yang paling cocok di antara densitas layar alternatif dan menskalakan 968 bitmap sesuai kebutuhan. Akan tetapi, demi pengalaman terbaik pada semua jenis perangkat, Anda harus 969 menyediakan 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 976 sumber daya alternatif yang akan digunakan saat runtime, bergantung pada konfigurasi perangkat saat ini. Untuk 977 mendemonstrasikan cara Android memilih sumber daya alternatif, anggaplah direktori drawable berikut 978 masing-masing berisi versi berbeda dari gambar yang sama:</p> 979 980 <pre class="classic no-pretty-print"> 981 drawable/ 982 drawable-en/ 983 drawable-fr-rCA/ 984 drawable-en-port/ 985 drawable-en-notouch-12key/ 986 drawable-port-ldpi/ 987 drawable-port-notouch-12key/ 988 </pre> 989 990 <p>Dan anggaplah yang berikut ini merupakan konfigurasi perangkatnya:</p> 991 992 <p style="margin-left:1em;"> 993 Lokal = <code>en-GB</code> <br/> 994 Orientasi layar = <code>port</code> <br/> 995 Densitas piksel layar = <code>hdpi</code> <br/> 996 Tipe layar sentuh = <code>notouch</code> <br/> 997 Metode input teks utama = <code>12key</code> 998 </p> 999 1000 <p>Dengan membandingkan konfigurasi perangkat dengan sumber daya alternatif yang tersedia, Android akan memilih 1001 drawable dari {@code drawable-en-port}.</p> 1002 1003 <p>Sistem akan menentukan keputusannya mengenai sumber daya yang akan digunakan dengan logika 1004 berikut:</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 1010 sumber 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 1017 dengan lokal <code>en-GB</code>.</p> 1018 <pre class="classic no-pretty-print"> 1019 drawable/ 1020 drawable-en/ 1021 <strike>drawable-fr-rCA/</strike> 1022 drawable-en-port/ 1023 drawable-en-notouch-12key/ 1024 drawable-port-ldpi/ 1025 drawable-port-notouch-12key/ 1026 </pre> 1027 <p class="note"><strong>Eksepsi:</strong> Densitas piksel layar adalah satu qualifier yang 1028 tidak dihapus karena bertentangan. Meskipun densitas layar perangkat adalah hdpi, 1029 <code>drawable-port-ldpi/</code> tidak dihapus karena setiap densitas layar 1030 dianggap cocok untuk saat ini. Informasi selengkapnya tersedia dalam dokumen <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa 1031 Layar</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, 1038 jawabannya 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 1044 menghapus semua direktori yang tidak menyertakan qualifier bahasa:</li> 1045 <pre class="classic no-pretty-print"> 1046 <strike>drawable/</strike> 1047 drawable-en/ 1048 drawable-en-port/ 1049 drawable-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, 1054 Android akan memilih opsi yang paling cocok dengan densitas layar perangkat. 1055 Secara umum, Android lebih suka menurunkan skala gambar asli yang lebih besar daripada menaikkan skala 1056 atas gambar asli yang lebih kecil. Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa 1057 Layar</a>.</p> 1058 </li> 1059 1060 <li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi 1061 layar adalah qualifier berikutnya yang memiliki kecocokan. 1062 Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus: 1063 <pre class="classic no-pretty-print"> 1064 <strike>drawable-en/</strike> 1065 drawable-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 1073 lebih lanjut. Satu optimalisasi tersebut adalah bahwa setelah konfigurasi perangkat diketahui, sistem mungkin 1074 akan menghapus sumber daya alternatif yang sama sekali tidak cocok. Misalnya, jika bahasa konfigurasi 1075 adalah bahasa Inggris ("en"), maka setiap direktori sumber daya yang memiliki qualifier bahasa akan diatur ke 1076 selain bahasa Inggris tidak akan pernah disertakan dalam pool sumber daya yang diperiksa (meskipun 1077 direktori sumber daya <em>tanpa</em> qualifier bahasa masih disertakan).</p> 1078 1079 <p>Saat memilih sumber daya berdasarkan qualifier ukuran layar, sistem akan menggunakan 1080 sumber 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, 1082 jika 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 1084 perangkat (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code xlarge}, 1085 namun 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 1088 daripada jumlah qualifier yang benar-benar pas dengan perangkat. Misalnya, dalam langkah 4 di atas, pilihan 1089 terakhir pada daftar berisi tiga qualifier yang bebar-benar cocok dengan perangkat (orientasi, tipe 1090 layar 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