| page.title=Menyediakan Sumber Daya |
| parent.title=Sumber Daya Aplikasi |
| parent.link=index.html |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>Tampilan Cepat</h2> |
| <ul> |
| <li>Berbagai tipe sumber daya termasuk dalam subdirektori {@code res/}</li> |
| <li>Sumber daya alternatif menyediakan file sumber daya dengan konfigurasi tertentu</li> |
| <li>Sertakan selalu sumber daya default agar aplikasi Anda tidak bergantung pada |
| konfigurasi perangkat tertentu</li> |
| </ul> |
| <h2>Dalam dokumen ini</h2> |
| <ol> |
| <li><a href="#ResourceTypes">Mengelompokkan Tipe Sumber Daya</a></li> |
| <li><a href="#AlternativeResources">Menyediakan Sumber Daya Alternatif</a> |
| <ol> |
| <li><a href="#QualifierRules">Aturan penamaan qualifier</a></li> |
| <li><a href="#AliasResources">Membuat sumber daya alias</a></li> |
| </ol> |
| </li> |
| <li><a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</a></li> |
| <li><a href="#BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</a></li> |
| </ol> |
| |
| <h2>Lihat juga</h2> |
| <ol> |
| <li><a href="accessing-resources.html">Mengakses Sumber Daya</a></li> |
| <li><a href="available-resources.html">Tipe Sumber Daya</a></li> |
| <li><a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa |
| Layar</a></li> |
| </ol> |
| </div> |
| </div> |
| |
| <p>Anda harus selalu mengeksternalkan sumber daya aplikasi seperti gambar dan string dari kode |
| , agar Anda bisa memeliharanya secara independen. Anda juga harus menyediakan sumber daya alternatif untuk |
| konfigurasi perangkat tertentu, dengan mengelompokkannya dalam direktori sumber daya bernama khusus. Saat |
| runtime, Android menggunakan sumber daya yang sesuai berdasarkan konfigurasi saat ini. Misalnya, Anda mungkin |
| ingin menyediakan layout UI berbeda bergantung pada ukuran layar atau string berbeda bergantung pada |
| pengaturan bahasa.</p> |
| |
| <p>Setelah mengeksternalkan sumber daya aplikasi, Anda dapat mengaksesnya menggunakan |
| ID sumber daya yang dibuat dalam kelas {@code R} proyek Anda. Cara menggunakan |
| sumber daya dalam aplikasi dibahas dalam <a href="accessing-resources.html">Mengakses |
| Sumber Daya</a>. Dokumen ini menampilkan cara mengelompokkan sumber daya |
| dalam proyek Android Anda dan menyediakan sumber daya alternatif untuk konfigurasi perangkat tertentu.</p> |
| |
| |
| <h2 id="ResourceTypes">Mengelompokkan Tipe Sumber Daya</h2> |
| |
| <p>Anda harus menempatkan setiap tipe sumber daya dalam subdirektori spesifik pada direktori |
| {@code res/} proyek. Misalnya, inilah hierarki file untuk proyek sederhana:</p> |
| |
| <pre class="classic no-pretty-print"> |
| MyProject/ |
| src/ <span style="color:black"> |
| MyActivity.java </span> |
| res/ |
| drawable/ <span style="color:black"> |
| graphic.png </span> |
| layout/ <span style="color:black"> |
| main.xml |
| info.xml</span> |
| mipmap/ <span style="color:black"> |
| icon.png </span> |
| values/ <span style="color:black"> |
| strings.xml </span> |
| </pre> |
| |
| <p>Seperti yang Anda lihat dalam contoh ini, direktori {@code res/} berisi semua sumber daya (dalam |
| subdirektori): sumber daya gambar, dua sumber daya layout, direktori {@code mipmap/} untuk ikon |
| launcher, dan satu file sumber daya string. Nama direktori |
| sumber daya penting dan dijelaskan dalam tabel 1.</p> |
| |
| <p class="note"><strong>Catatan:</strong> Untuk informasi selengkapnya tentang menggunakan folder mipmap, lihat |
| <a href="{@docRoot}tools/projects/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</p> |
| |
| <p class="table-caption" id="table1"><strong>Tabel 1.</strong> Direktori sumber daya |
| didukung dalam direktori proyek {@code res/}.</p> |
| |
| <table> |
| <tr> |
| <th scope="col">Direktori</th> |
| <th scope="col">Tipe Sumber Daya</th> |
| </tr> |
| |
| <tr> |
| <td><code>animator/</code></td> |
| <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/prop-animation.html">animasi |
| properti</a>.</td> |
| </tr> |
| |
| <tr> |
| <td><code>anim/</code></td> |
| <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">animasi |
| tween</a>. (Animasi properti juga dapat disimpan dalam direktori ini, namun |
| direktori {@code animator/} lebih disukai bagi animasi properti agar kedua tipe |
| ini dapat dibedakan.)</td> |
| </tr> |
| |
| <tr> |
| <td><code>color/</code></td> |
| <td>File XML yang mendefinisikan daftar status warna. Lihat <a href="color-list-resource.html">Sumber Daya |
| Daftar Status Warna</a></td> |
| </tr> |
| |
| <tr> |
| <td><code>drawable/</code></td> |
| |
| <td><p>File bitmap ({@code .png}, {@code .9.png}, {@code .jpg}, {@code .gif}) atau file XML yang |
| dikompilasi menjadi subtipe sumber daya drawable berikut:</p> |
| <ul> |
| <li>File bitmap</li> |
| <li>Nine-Patches (bitmap yang dapat diubah ukurannya)</li> |
| <li>Daftar status</li> |
| <li>Bentuk</li> |
| <li>Drawable animasi</li> |
| <li>Drawable lainnya</li> |
| </ul> |
| <p>Lihat <a href="drawable-resource.html">Sumber Daya Drawable</a>.</p> |
| </td> |
| </tr> |
| |
| <tr> |
| <td><code>mipmap/</code></td> |
| <td>File drawable untuk densitas ikon launcher yang berbeda. Untuk informasi selengkapnya tentang |
| mengelola ikon launcher dengan folder {@code mipmap/}, lihat |
| <a href="{@docRoot}tools/project/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</td> |
| </tr> |
| |
| <tr> |
| <td><code>layout/</code></td> |
| <td>File XML yang mendefinisikan layout antarmuka pengguna. |
| Lihat <a href="layout-resource.html">Sumber Daya Layout</a>.</td> |
| </tr> |
| |
| <tr> |
| <td><code>menu/</code></td> |
| <td>File XML yang mendefinisikan menu aplikasi, seperti Menu Opsi, Menu Konteks, atau Sub |
| Menu. Lihat <a href="menu-resource.html">Sumber Daya Menu</a>.</td> |
| </tr> |
| |
| <tr> |
| <td><code>raw/</code></td> |
| <td><p>File tak didukung yang akan disimpan dalam bentuk mentah. Untuk membuka sumber daya ini dengan |
| {@link java.io.InputStream} mentah, panggil {@link android.content.res.Resources#openRawResource(int) |
| Resources.openRawResource()} dengan ID sumber daya, yaitu {@code R.raw.<em>filename</em>}.</p> |
| <p>Akan tetapi, jika Anda butuh akses ke nama file asli dan hierarki file, Anda bisa mempertimbangkan |
| untuk menyimpan beberapa sumber daya dalam direktori {@code |
| assets/} (sebagai ganti {@code res/raw/}). File dalam {@code assets/} tidak diberi |
| ID sumber daya, jadi Anda bisa membacanya hanya dengan menggunakan {@link android.content.res.AssetManager}.</p></td> |
| </tr> |
| |
| <tr> |
| <td><code>values/</code></td> |
| <td><p>File XML yang berisi nilai-nilai sederhana, seperti string, integer, dan warna.</p> |
| <p>Walaupun file sumber daya XML dalam subdirektori {@code res/} lainnya mendefinisikan satu sumber daya |
| berdasarkan nama file XML, file dalam direktori {@code values/} menggambarkan beberapa sumber daya. |
| Untuk file dalam direktori ini, setiap anak elemen {@code <resources>} mendefinisikan satu sumber |
| daya. Misalnya, elemen {@code <string>} membuat sumber daya |
| {@code R.string} dan elemen {@code <color>} membuat sumber daya {@code R.color} |
| .</p> |
| <p>Karena setiap sumber daya didefinisikan dengan elemen XML-nya sendiri, Anda bisa bebas menamai file |
| ini dan menempatkan tipe sumber daya berbeda dalam satu file. Akan tetapi, agar jelas, Anda mungkin |
| perlu menempatkan tipe sumber daya unik dalam file berbeda. Misalnya, berikut ini adalah beberapa ketentuan |
| penamaan file untuk sumber daya yang dapat Anda buat dalam direktori ini:</p> |
| <ul> |
| <li>arrays.xml untuk larik sumber daya tipe (<a href="more-resources.html#TypedArray">larik bertipe</a>).</li> |
| <li>colors.xml untuk <a href="more-resources.html#Color">nilai warna</a></li> |
| <li>dimens.xml untuk <a href="more-resources.html#Dimension">nilai dimensi</a>.</li> |
| <li>strings.xml untuk <a href="string-resource.html">nilai |
| string</a>.</li> |
| <li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li> |
| </ul> |
| <p>Lihat <a href="string-resource.html">Sumber Daya String</a>, |
| <a href="style-resource.html">Sumber Daya Gaya</a>, dan |
| <a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p> |
| </td> |
| </tr> |
| |
| <tr> |
| <td><code>xml/</code></td> |
| <td>File XML tak didukung yang bisa dibaca saat runtime dengan memanggil {@link |
| android.content.res.Resources#getXml(int) Resources.getXML()}. Berbagai file konfigurasi XML |
| harus disimpan di sini, seperti <a href="{@docRoot}guide/topics/search/searchable-config.html">konfigurasi yang dapat dicari</a>. |
| <!-- or preferences configuration. --></td> |
| </tr> |
| </table> |
| |
| <p class="caution"><strong>Perhatian:</strong> Jangan menyimpan file sumber daya secara langsung dalam |
| direktori {@code res/}— karena akan menyebabkan kesalahan compiler.</p> |
| |
| <p>Untuk informasi selengkapnya tentang tipe sumber daya tertentu, lihat dokumentasi <a href="available-resources.html">Tipe Sumber Daya</a>.</p> |
| |
| <p>Sumber daya yang disimpan dalam subdirektori yang didefinisikan dalam tabel 1 adalah sumber daya |
| "default" Anda. Berarti sumber daya ini mendefinisikan desain default dan konten untuk aplikasi Anda. |
| Akan tetapi, beberapa tipe perangkat berbasis Android mungkin memanggil tipe sumber daya yang berbeda. |
| Misalnya, jika perangkat memiliki layar yang lebih besar daripada layar normal, maka Anda harus |
| menyediakan sumber daya layout berbeda yang memanfaatkan ruang layar yang lebih besar. Atau, jika perangkat |
| memiliki pengaturan bahasa berbeda, maka Anda harus menyediakan sumber daya string berbeda yang menerjemahkan teks dalam |
| antarmuka pengguna Anda. Untuk menyediakan sumber daya berbeda ini bagi |
| konfigurasi perangkat yang berbeda, Anda harus menyediakan sumber daya alternatif, selain sumber |
| daya default.</p> |
| |
| |
| <h2 id="AlternativeResources">Menyediakan Sumber Daya Alternatif</h2> |
| |
| |
| <div class="figure" style="width:429px"> |
| <img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" /> |
| <p class="img-caption"> |
| <strong>Gambar 1.</strong> Dua perangkat berbeda, masing-masing menggunakan sumber daya layout berbeda.</p> |
| </div> |
| |
| <p>Hampir setiap aplikasi harus menyediakan sumber daya alternatif untuk mendukung konfigurasi |
| perangkat tertentu. Misalnya, Anda harus menyertakan sumber daya drawable alternatif untuk densitas layar |
| berbeda dan sumber daya string alternatif untuk bahasa yang berbeda. Saat runtime, Android |
| akan mendeteksi konfigurasi perangkat aktif dan memuat |
| sumber daya yang sesuai untuk aplikasi Anda.</p> |
| |
| <p>Untuk menyebutkan alternatif konfigurasi tertentu untuk satu set sumber daya:</p> |
| <ol> |
| <li>Buat direktori baru dalam {@code res/} yang dinamai dalam bentuk {@code |
| <em><resources_name></em>-<em><config_qualifier></em>}. |
| <ul> |
| <li><em>{@code <resources_name>}</em> adalah nama direktori dari sumber daya default |
| terkait (didefinisikan dalam tabel 1).</li> |
| <li><em>{@code <qualifier>}</em> adalah nama yang menetapkan konfigurasi individu |
| yang akan digunakan sumber daya ini (didefinisikan dalam tabel 2).</li> |
| </ul> |
| <p>Anda bisa menambahkan lebih dari satu <em>{@code <qualifier>}</em>. Pisahkan masing-masing |
| dengan tanda hubung.</p> |
| <p class="caution"><strong>Perhatian:</strong> Saat menambahkan beberapa qualifier, Anda |
| harus menempatkannya dalam urutan yang sama dengan yang tercantum dalam tabel 2. Jika urutan qualifier |
| salah, sumber daya akan diabaikan.</p> |
| </li> |
| <li>Simpan masing-masing sumber daya alternatif dalam direktori baru ini. File sumber daya harus dinamai |
| sama persis dengan file sumber daya default.</li> |
| </ol> |
| |
| <p>Misalnya, berikut ini beberapa sumber daya default dan sumber daya alternatif:</p> |
| |
| <pre class="classic no-pretty-print"> |
| res/ |
| drawable/ <span style="color:black"> |
| icon.png |
| background.png </span> |
| drawable-hdpi/ <span style="color:black"> |
| icon.png |
| background.png </span> |
| </pre> |
| |
| <p>Qualifier {@code hdpi} menunjukkan bahwa sumber daya dalam direktori itu diperuntukkan bagi perangkat dengan |
| layar densitas tinggi. Gambar di masing-masing direktori drawable memiliki ukuran untuk densitas layar |
| tertentu, namun nama filenya persis |
| sama. Dengan demikian, ID sumber daya yang Anda gunakan untuk mengacu gambar {@code icon.png} atau @code |
| background.png} selalu sama, namun Android memilih |
| versi masing-masing sumber daya yang paling cocok dengan perangkat saat ini, dengan membandingkan informasi konfigurasi |
| perangkat dengan qualifier dalam nama direktori sumber daya.</p> |
| |
| <p>Android mendukung beberapa qualifier konfigurasi dan Anda dapat |
| menambahkan beberapa qualifier ke satu nama direktori, dengan memisahkan setiap qualifier dengan tanda hubung. Tabel 2 |
| berisi daftar qualifier konfigurasi yang valid, dalam urutan prioritas—jika Anda menggunakan beberapa |
| qualifier sebagai direktori sumber daya, Anda harus menambahkannya ke nama direktori sesuai urutan |
| yang tercantum dalam tabel.</p> |
| |
| |
| <p class="table-caption" id="table2"><strong>Tabel 2.</strong> Nama-nama |
| qualifier konfigurasi.</p> |
| <table> |
| <tr> |
| <th>Konfigurasi</th> |
| <th>Nilai-nilai Qualifier</th> |
| <th>Keterangan</th> |
| </tr> |
| <tr id="MccQualifier"> |
| <td>MCC dan MNC</td> |
| <td>Contoh:<br/> |
| <code>mcc310</code><br/> |
| <code><nobr>mcc310-mnc004</nobr></code><br/> |
| <code>mcc208-mnc00</code><br/> |
| dll. |
| </td> |
| <td> |
| <p>Kode negara seluler (MCC), bisa diikuti dengan kode jaringan seluler (MNC) |
| dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja, |
| <code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk |
| Orange.</p> |
| <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal |
| dari kartu SIM.</p> |
| <p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal |
| spesifik untuk negara itu di aplikasi Anda). Jika Anda perlu menetapkan hanya berdasarkan bahasa, maka gunakan qualifier |
| <em>bahasa dan wilayah</em> sebagai gantinya (akan dibahas nanti). Jika Anda memutuskan untuk menggunakan qualifier MCC dan |
| MNC, Anda harus melakukannya dengan hati-hati dan menguji apakah qualifier itu berjalan sesuai harapan.</p> |
| <p>Lihat juga bidang konfigurasi {@link |
| android.content.res.Configuration#mcc}, dan {@link |
| android.content.res.Configuration#mnc}, yang masing-masing menunjukkan kode negara seluler saat ini |
| dan kode jaringan seluler.</p> |
| </td> |
| </tr> |
| <tr id="LocaleQualifier"> |
| <td>Bahasa dan wilayah</td> |
| <td>Contoh:<br/> |
| <code>en</code><br/> |
| <code>fr</code><br/> |
| <code>en-rUS</code><br/> |
| <code>fr-rFR</code><br/> |
| <code>fr-rCA</code><br/> |
| dll. |
| </td> |
| <td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO |
| 639-1</a>, bisa juga diikuti dengan kode wilayah |
| dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO |
| 3166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}"). |
| </p><p> |
| Kode <em>tidak</em> membedakan huruf besar atau kecil; awalan {@code r} akan digunakan untuk |
| membedakan bagian wilayah. |
| Anda tidak bisa menetapkan wilayah saja.</p> |
| <p>Ini bisa berubah selama masa pakai |
| aplikasi Anda jika pengguna mengubah bahasanya dalam pengaturan sistem. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang |
| bagaimana hal ini dapat memengaruhi aplikasi Anda selama runtime.</p> |
| <p>Lihat <a href="localization.html">Pelokalan</a> untuk panduan lengkap melokalkan |
| aplikasi Anda ke bahasa lain.</p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#locale} yang menunjukkan |
| bahasa setempat yang digunakan saat ini.</p> |
| </td> |
| </tr> |
| <tr id="LayoutDirectionQualifier"> |
| <td>Arah Layout</td> |
| <td><code>ldrtl</code><br/> |
| <code>ldltr</code><br/> |
| </td> |
| <td><p>Arah layout aplikasi Anda. {@code ldrtl} berarti "arah layout dari kanan ke kiri". |
| {@code ldltr} berarti "arah layout dari kiri ke kanan" dan merupakan nilai implisit default. |
| </p> |
| <p>Ini bisa berlaku untuk sumber daya mana pun seperti layout, drawable, atau nilai-nilai. |
| </p> |
| <p>Misalnya, jika Anda ingin memberikan beberapa layout khusus untuk bahasa Arab dan beberapa |
| layout umum untuk setiap bahasa lainnya yang menggunakan "kanan-ke-kiri" lainnya (seperti bahasa Persia atau Ibrani) maka Anda akan memiliki: |
| </p> |
| <pre class="classic no-pretty-print"> |
| res/ |
| layout/ <span style="color:black"> |
| main.xml </span>(Default layout) |
| layout-ar/ <span style="color:black"> |
| main.xml </span>(Specific layout for Arabic) |
| layout-ldrtl/ <span style="color:black"> |
| main.xml </span>(Any "right-to-left" language, except |
| for Arabic, because the "ar" language qualifier |
| has a higher precedence.) |
| </pre> |
| <p class="note"><strong>Catatan:</strong> Untuk mengaktifkan fitur |
| layout kanan-ke-kiri untuk aplikasi, Anda harus mengatur <a href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code |
| 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> |
| <p><em>Ditambahkan dalam API level 17.</em></p> |
| </td> |
| </tr> |
| <tr id="SmallestScreenWidthQualifier"> |
| <td>smallestWidth</td> |
| <td><code>sw<N>dp</code><br/><br/> |
| Contoh:<br/> |
| <code>sw320dp</code><br/> |
| <code>sw600dp</code><br/> |
| <code>sw720dp</code><br/> |
| dll. |
| </td> |
| <td> |
| <p>Ukuran dasar layar, sebagaimana yang ditunjukkan oleh dimensi terpendek dari area layar |
| yang tersedia. Secara spesifik, smallestWidth perangkat adalah yang terpendek dari |
| tinggi dan lebar layar yang tersedia (Anda dapat menganggapnya sebagai "lebar terkecil yang memungkinkan" untuk layar). Anda bisa |
| menggunakan qualifier ini untuk memastikan bahwa, apa pun orientasi layar saat ini, aplikasi |
| Anda memiliki paling tidak {@code <N>} dps dari lebar yang tersedia untuk UI-nya.</p> |
| <p>Misalnya, jika layout mengharuskan dimensi layar terkecilnya setiap saat paling tidak |
| 600 dp, maka Anda dapat menggunakan qualifer ini untuk membuat sumber daya layout, {@code |
| res/layout-sw600dp/}. Sistem akan menggunakan sumber daya ini hanya bila dimensi layar terkecil yang |
| tersedia paling tidak 600 dp, tanpa mempertimbangkan apakah sisi 600 dp adalah tinggi atau |
| lebar yang dipersepsikan pengguna. SmallestWidth adalah karakteristik ukuran layar tetap dari perangkat; <strong>smallestWidth |
| perangkat tidak berubah saat orientasi layar berubah</strong>.</p> |
| <p>SmallestWidth perangkat memperhitungkan dekorasi layar dan UI sistem. Misalnya |
| , jika perangkat memiliki beberapa elemen UI persisten pada layar yang menghitung ruang di sepanjang |
| sumbu smallestWidth, sistem akan mendeklarasikan smallestWidth lebih kecil daripada ukuran layar sebenarnya, |
| karena itu adalah piksel layar yang tidak tersedia untuk UI Anda. Sehingga nilai yang Anda |
| gunakan haruslah merupakan dimensi terkecil sebenarnya yang <em>dibutuhkan oleh layout Anda</em> (biasanya, nilai ini adalah |
| "lebar terkecil" yang didukung layout Anda, apa pun orientasi layar saat ini).</p> |
| <p>Sebagian nilai yang mungkin Anda gunakan untuk ukuran layar umum:</p> |
| <ul> |
| <li>320, untuk perangkat berkonfigurasi layar seperti: |
| <ul> |
| <li>240x320 ldpi (handset QVGA)</li> |
| <li>320x480 mdpi (handset)</li> |
| <li>480x800 hdpi (handset densitas tinggi)</li> |
| </ul> |
| </li> |
| <li>480, untuk layar seperti 480x800 mdpi (tablet/handset).</li> |
| <li>600, untuk layar seperti 600x1024 mdpi (tablet 7").</li> |
| <li>720, untuk layar seperti 720x1280 mdpi (tablet 10").</li> |
| </ul> |
| <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda untuk |
| qualifier smallestWidth terkecil, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi) |
| smallestWidth perangkat. </p> |
| <p><em>Ditambahkan dalam API level 13.</em></p> |
| <p>Lihat juga atribut <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code |
| android:requiresSmallestWidthDp}</a>, yang mendeklarasikan smallestWidth minimum yang |
| kompatibel dengan aplikasi Anda, dan bidang konfigurasi {@link |
| android.content.res.Configuration#smallestScreenWidthDp}, yang menyimpan nilai |
| smallestWidth perangkat.</p> |
| <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan |
| qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung |
| Multi Layar</a>.</p> |
| </td> |
| </tr> |
| <tr id="ScreenWidthQualifier"> |
| <td>Lebar yang tersedia</td> |
| <td><code>w<N>dp</code><br/><br/> |
| Contoh:<br/> |
| <code>w720dp</code><br/> |
| <code>w1024dp</code><br/> |
| dll. |
| </td> |
| <td> |
| <p>Menetapkan lebar layar minimum yang tersedia, di unit {@code dp} yang |
| menggunakan sumber daya—yang didefinisikan oleh nilai <code><N></code>. Nilai konfigurasi ini |
| akan berubah bila orientasi |
| berubah antara lanskap dan potret agar cocok dengan lebar sebenarnya saat ini.</p> |
| <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda |
| untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi) |
| lebar layar perangkat saat ini. Nilai |
| di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa |
| elemen UI persisten di tepi kiri atau kanan, layar |
| menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan |
| elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p> |
| <p><em>Ditambahkan dalam API level 13.</em></p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenWidthDp} |
| yang menyimpan lebar layar saat ini.</p> |
| <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan |
| qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung |
| Multi Layar</a>.</p> |
| </td> |
| </tr> |
| <tr id="ScreenHeightQualifier"> |
| <td>Tinggi yang tersedia</td> |
| <td><code>h<N>dp</code><br/><br/> |
| Contoh:<br/> |
| <code>h720dp</code><br/> |
| <code>h1024dp</code><br/> |
| dll. |
| </td> |
| <td> |
| <p>Menetapkan tinggi layar minimum yang tersedia, dalam satuan "dp" yang harus digunakan |
| sumber daya —bersama nilai yang didefinisikan oleh <code><N></code>. Nilai konfigurasi ini |
| akan berubah saat orientasi |
| berubah antara lanskap dan potret agar cocok dengan tinggi sebenarnya saat ini.</p> |
| <p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda |
| untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi) |
| tinggi layar perangkat saat ini. Nilai |
| di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa |
| elemen UI persisten di tepi atas atau bawah, layar akan |
| menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan |
| elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi |
| layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa |
| disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula |
| dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan |
| untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan. |
| <p><em>Ditambahkan dalam API level 13.</em></p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp} |
| yang menyimpan lebar layar saat ini.</p> |
| <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan |
| qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung |
| Multi Layar</a>.</p> |
| </td> |
| </tr> |
| <tr id="ScreenSizeQualifier"> |
| <td>Ukuran layar</td> |
| <td> |
| <code>small</code><br/> |
| <code>normal</code><br/> |
| <code>large</code><br/> |
| <code>xlarge</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code small}: Layar yang berukuran serupa dengan |
| layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil |
| adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah |
| dan VGA densitas tinggi.</li> |
| <li>{@code normal}: Layar yang berukuran serupa dengan |
| layar HVGA densitas sedang. Ukuran layout minimum untuk |
| layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah |
| WQVGA densitas rendah, HVGA densitas sedang, WVGA |
| densitas tinggi.</li> |
| <li>{@code large}: Layar yang berukuran serupa dengan |
| layar VGA densitas sedang. |
| Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp. |
| Misalnya layar VGA dan WVGA densitas sedang.</li> |
| <li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA |
| densitas sedang tradisional. Ukuran layout minimum untuk |
| layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar |
| seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar |
| berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li> |
| </ul> |
| <p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa |
| sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber |
| daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya |
| mana saja yang <a href="#BestMatch">paling cocok</a>.</p> |
| <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan |
| qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi |
| Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code |
| xlarge}, namun perangkat memiliki ukuran layar normal).</p> |
| <p><em>Ditambahkan dalam API level 4.</em></p> |
| |
| <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa |
| Layar</a> untuk informasi selengkapnya.</p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout}, |
| yang menunjukkan apakah layar berukuran kecil, normal, atau |
| besar.</p> |
| </td> |
| </tr> |
| <tr id="ScreenAspectQualifier"> |
| <td>Aspek layar</td> |
| <td> |
| <code>long</code><br/> |
| <code>notlong</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code long}: Layar panjang, seperti WQVGA, WVGA, FWVGA</li> |
| <li>{@code notlong}: Layar tidak panjang, seperti QVGA, HVGA, dan VGA</li> |
| </ul> |
| <p><em>Ditambahkan dalam API level 4.</em></p> |
| <p>Ini berdasarkan sepenuhnya pada rasio aspek layar (layar "panjang" lebih lebar). Ini |
| tidak ada kaitannya dengan orientasi layar.</p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout}, |
| yang menunjukkan apakah layar panjang.</p> |
| </td> |
| </tr> |
| <tr id="OrientationQualifier"> |
| <td>Orientasi layar</td> |
| <td> |
| <code>port</code><br/> |
| <code>land</code> <!-- <br/> |
| <code>square</code> --> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code port}: Perangkat dalam orientasi potret (vertikal)</li> |
| <li>{@code land}: Perangkat dalam orientasi lanskap (horizontal)</li> |
| <!-- Square mode is currently not used. --> |
| </ul> |
| <p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar |
| layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk |
| informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation}, |
| yang menunjukkan orientasi perangkat saat ini.</p> |
| </td> |
| </tr> |
| <tr id="UiModeQualifier"> |
| <td>Mode UI</td> |
| <td> |
| <code>car</code><br/> |
| <code>desk</code><br/> |
| <code>television</code><br/> |
| <code>appliance</code> |
| <code>watch</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li> |
| <li>{@code desk}: Perangkat sedang menampilkan di dudukan perangkat di meja</li> |
| <li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan |
| pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna, |
| terutama diorientasikan seputar DPAD atau |
| interaksi non-pointer lainnya</li> |
| <li>{@code appliance}: Perangkat berlaku sebagai |
| alat, tanpa tampilan</li> |
| <li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li> |
| </ul> |
| <p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p> |
| <p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan |
| ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan |
| dan Memantau Kondisi dan Tipe Dudukan</a>.</p> |
| <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di |
| dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link |
| android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk |
| informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> |
| </td> |
| </tr> |
| <tr id="NightQualifier"> |
| <td>Mode malam</td> |
| <td> |
| <code>night</code><br/> |
| <code>notnight</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code night}: Waktu malam</li> |
| <li>{@code notnight}: Waktu siang</li> |
| </ul> |
| <p><em>Ditambahkan dalam API level 8.</em></p> |
| <p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam |
| mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari. Anda dapat mengaktifkan |
| 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 |
| aplikasi Anda selama runtime.</p> |
| </td> |
| </tr> |
| <tr id="DensityQualifier"> |
| <td>Densitas piksel layar (dpi)</td> |
| <td> |
| <code>ldpi</code><br/> |
| <code>mdpi</code><br/> |
| <code>hdpi</code><br/> |
| <code>xhdpi</code><br/> |
| <code>xxhdpi</code><br/> |
| <code>xxxhdpi</code><br/> |
| <code>nodpi</code><br/> |
| <code>tvdpi</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code ldpi}: Layar densitas rendah; sekitar 120 dpi.</li> |
| <li>{@code mdpi}: Layar densitas sedang (pada HVGA tradisional); sekitar 160 dpi. |
| </li> |
| <li>{@code hdpi}: Layar densitas tinggi; sekitar 240 dpi.</li> |
| <li>{@code xhdpi}: Layar densitas ekstra tinggi; sekitar 320 dpi. <em>Ditambahkan dalam API |
| Level 8.</em></li> |
| <li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API |
| Level 16.</em></li> |
| <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher, |
| lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a> |
| dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API |
| Level 18.</em></li> |
| <li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda |
| skalakan agar sama dengan densitas perangkat.</li> |
| <li>{@code tvdpi}: Layar antara mdpi dan hdpi; sekitar 213 dpi. Ini |
| tidak dianggap sebagai kelompok densitas "utama". Sebagian besar ditujukan untuk televisi dan kebanyakan |
| aplikasi tidak memerlukannya —asalkan sumber daya mdpi dan hdpi cukup untuk sebagian besar aplikasi dan |
| sistem akan menskalakan sebagaimana mestinya. Qualifier ini diperkenalkan pada API level 13.</li> |
| </ul> |
| <p>Terdapat rasio skala 3:4:6:8:12:16 antara enam densitas utama (dengan mengabaikan densitas |
| tvdpi). Jadi bitmap 9x9 di ldpi adalah 12x12 di mdpi, 18x18 di hdpi, 24x24 di xhdpi dan seterusnya. |
| </p> |
| <p>Jika Anda memutuskan bahwa sumber daya gambar tidak terlihat cukup baik di televisi |
| atau perangkat tertentu lainnya dan ingin mencoba sumber daya tvdpi, faktor skalanya adalah 1,33*mdpi. Misalnya, |
| gambar 100px x 100px untuk layar mdpi harus 133px x 133px untuk tvdpi.</p> |
| <p class="note"><strong>Catatan:</strong> Menggunakan qualifier densitas tidak berarti bahwa |
| sumber daya <em>hanya</em> untuk layar dengan ukuran itu saja. Jika Anda tidak menyediakan sumber |
| daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya |
| mana saja yang <a href="#BestMatch">paling cocok</a>.</p> |
| <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa |
| Layar</a> untuk informasi selengkapnya tentang cara menangani densitas layar yang berbeda dan cara Android |
| menurunkan skala bitmap Anda agar sesuai dengan densitas saat ini.</p> |
| </td> |
| </tr> |
| <tr id="TouchscreenQualifier"> |
| <td>Tipe layar sentuh</td> |
| <td> |
| <code>notouch</code><br/> |
| <code>finger</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code notouch}: Perangkat tidak memiliki layar sentuh.</li> |
| <li>{@code finger}: Perangkat memiliki layar sentuh yang dimaksudkan untuk |
| digunakan melalui interaksi dengan jari pengguna.</li> |
| </ul> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#touchscreen}, yang |
| menunjukkan tipe layar sentuh pada perangkat.</p> |
| </td> |
| </tr> |
| <tr id="KeyboardAvailQualifier"> |
| <td>Ketersediaan keyboard</td> |
| <td> |
| <code>keysexposed</code><br/> |
| <code>keyshidden</code><br/> |
| <code>keyssoft</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code keysexposed}: Perangkat menyediakan keyboard. Jika perangkat mengaktifkan |
| keyboard perangkat lunak (kemungkinan), ini dapat digunakan bahkan saat keyboard fisik |
| <em>tidak</em> diekspos kepada pengguna, meskipun perangkat tidak memiliki keyboard fisik. Jika keyboard |
| perangkat lunak tidak disediakan atau dinonaktifkan, maka ini hanya digunakan bila |
| keyboard fisik diekspos.</li> |
| <li>{@code keyshidden}: Perangkat memiliki keyboard fisik yang tersedia |
| tetapi tersembunyi <em>dan</em> perangkat <em>tidak</em> mengaktifkan keyboard perangkat lunak.</li> |
| <li>{@code keyssoft}: Perangkat mengaktifkan keyboard perangkat lunak, |
| baik itu terlihat maupun tidak.</li> |
| </ul> |
| <p>Jika Anda menyediakan sumber daya <code>keysexposed</code>, namun bukan sumber daya <code>keyssoft</code> |
| , sistem akan menggunakan sumber daya <code>keysexposed</code> baik keyboard |
| terlihat atau tidak, asalkan sistem telah mengaktifkan keyboard perangkat lunak.</p> |
| <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna membuka keyboard |
| fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana |
| hal ini memengaruhi aplikasi Anda selama runtime.</p> |
| <p>Lihat juga bidang konfigurasi {@link |
| android.content.res.Configuration#hardKeyboardHidden} dan {@link |
| android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas |
| keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p> |
| </td> |
| </tr> |
| <tr id="ImeQualifier"> |
| <td>Metode input teks utama</td> |
| <td> |
| <code>nokeys</code><br/> |
| <code>qwerty</code><br/> |
| <code>12key</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code nokeys}: Perangkat tidak memiliki tombol fisik untuk input teks.</li> |
| <li>{@code qwerty}: Perangkat memiliki keyboard fisik qwerty, baik terlihat maupun tidak pada |
| pengguna |
| .</li> |
| <li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak |
| pada pengguna.</li> |
| </ul> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard}, |
| yang menunjukkan metode utama input teks yang tersedia.</p> |
| </td> |
| </tr> |
| <tr id="NavAvailQualifier"> |
| <td>Ketersediaan tombol navigasi</td> |
| <td> |
| <code>navexposed</code><br/> |
| <code>navhidden</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code navexposed}: Tombol navigasi tersedia bagi pengguna.</li> |
| <li>{@code navhidden}: Tombol navigasi tidak tersedia (misalnya di balik penutup yang |
| ditutup).</li> |
| </ul> |
| <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menyingkap tombol |
| navigasi. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk |
| informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigationHidden}, yang menunjukkan |
| apakah tombol navigasi disembunyikan.</p> |
| </td> |
| </tr> |
| <tr id="NavigationQualifier"> |
| <td>Metode navigasi non-sentuh utama</td> |
| <td> |
| <code>nonav</code><br/> |
| <code>dpad</code><br/> |
| <code>trackball</code><br/> |
| <code>wheel</code> |
| </td> |
| <td> |
| <ul class="nolist"> |
| <li>{@code nonav}: Perangkat tidak memiliki fasilitas navigasi selain menggunakan |
| layar sentuh.</li> |
| <li>{@code dpad}: Perangkat memiliki pad pengarah (directional pad / d-pad) untuk navigasi.</li> |
| <li>{@code trackball}: Perangkat memiliki trackball untuk navigasi.</li> |
| <li>{@code wheel}: Perangkat memiliki roda pengarah (directional wheel) untuk navigasi (tidak umum).</li> |
| </ul> |
| <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigation}, |
| yang menunjukkan tipe metode navigasi yang tersedia.</p> |
| </td> |
| </tr> |
| <!-- DEPRECATED |
| <tr> |
| <td>Screen dimensions</td> |
| <td>Examples:<br/> |
| <code>320x240</code><br/> |
| <code>640x480</code><br/> |
| etc. |
| </td> |
| <td> |
| <p>The larger dimension must be specified first. <strong>This configuration is deprecated |
| and should not be used</strong>. Instead use "screen size," "wider/taller screens," and "screen |
| orientation" described above.</p> |
| </td> |
| </tr> |
| --> |
| <tr id="VersionQualifier"> |
| <td>Versi Platform (level API)</td> |
| <td>Contoh:<br/> |
| <code>v3</code><br/> |
| <code>v4</code><br/> |
| <code>v7</code><br/> |
| dll.</td> |
| <td> |
| <p>Level API yang didukung perangkat. Misalnya, <code>v1</code> untuk API level |
| 1 (perangkat dengan Android 1.0 atau yang lebih tinggi) dan <code>v4</code> untuk API level 4 (perangkat dengan Android |
| 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 |
| tentang nilai-nilai ini.</p> |
| </td> |
| </tr> |
| </table> |
| |
| |
| <p class="note"><strong>Catatan:</strong> Sebagian qualifier konfigurasi telah ditambahkan sejak Android |
| 1.0, jadi tidak semua versi Android mendukung semua qualifier. Menggunakan qualifier baru secara implisit |
| akan menambahkan qualifier versi platform sehingga perangkat yang lebih lama pasti mengabaikannya. Misalnya, menggunakan qualifier |
| <code>w600dp</code> secara otomatis akan menyertakan qualifier <code>v13</code>, karena |
| qualifier lebar yang tersedia baru di API level 13. Untuk menghindari masalah, selalu sertakan satu set |
| sumber daya default (satu set sumber daya <em>tanpa qualifier</em>). Untuk informasi selengkapnya, lihat |
| bagian tentang <a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan |
| Sumber Daya</a>.</p> |
| |
| |
| |
| <h3 id="QualifierRules">Aturan penamaan qualifier</h3> |
| |
| <p>Inilah beberapa aturan tentang penggunaan nama qualifier konfigurasi:</p> |
| |
| <ul> |
| <li>Anda bisa menetapkan beberapa qualifier untuk satu set sumber daya, yang dipisahkan dengan tanda hubung. Misalnya, |
| <code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi |
| lanskap.</li> |
| <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>. |
| Misalnya: |
| <ul> |
| <li>Salah: <code>drawable-hdpi-port/</code></li> |
| <li>Benar: <code>drawable-port-hdpi/</code></li> |
| </ul> |
| </li> |
| <li>Direktori sumber daya alternatif tidak bisa digunakan. Misalnya, Anda tidak bisa memiliki |
| <code>res/drawable/drawable-en/</code>.</li> |
| <li>Nilai tidak membedakan huruf besar maupun kecil. Compiler sumber daya mengubah nama direktori |
| menjadi huruf kecil sebelum pemrosesan untuk menghindari masalah pada sistem file yang membedakan |
| huruf kecil dan besar. Setiap penggunaan huruf besar dalam nama hanyalah demi keterbacaan.</li> |
| <li>Hanya didukung satu nilai untuk setiap tipe qualifier. Misalnya, jika Anda ingin menggunakan |
| file drawable yang sama untuk Spanyol dan Prancis, Anda <em>tidak bisa</em> memiliki direktori bernama |
| <code>drawable-rES-rFR/</code>. Sebagai gantinya, Anda perlu dua direktori sumber daya, seperti |
| <code>drawable-rES/</code> dan <code>drawable-rFR/</code>, berisi file yang sesuai. |
| Akan tetapi, Anda tidak harus benar-benar menggandakan file yang sama di kedua lokasi. Sebagai gantinya, Anda |
| bisa membuat alias ke satu sumber daya. Lihat <a href="#AliasResources">Membuat |
| sumber daya alias</a> di bawah ini.</li> |
| </ul> |
| |
| <p>Setelah Anda menyimpan sumber daya alternatif ke dalam direktori yang diberi nama dengan |
| qualifier ini, Android secara otomatis menerapkan sumber daya dalam |
| aplikasi Anda berdasarkan pada konfigurasi perangkat saat ini. Setiap kali sumber daya diminta, Android akan memeriksa direktori sumber daya |
| alternatif berisi file sumber daya yang diminta, lalu <a href="#BestMatch">mencari sumber daya yang |
| paling cocok</a>(dibahas di bawah). Jika tidak ada sumber daya alternatif yang cocok |
| dengan konfigurasi perangkat tertentu, Android akan menggunakan sumber daya default terkait (set |
| sumber daya untuk tipe sumber daya tertentu yang tidak termasuk qualifier |
| konfigurasi).</p> |
| |
| |
| |
| <h3 id="AliasResources">Membuat sumber daya alias</h3> |
| |
| <p>Bila memiliki sumber daya yang ingin Anda gunakan untuk lebih dari satu konfigurasi |
| perangkat (namun tidak ingin menyediakannya sebagai sumber daya default), Anda tidak perlu menempatkan sumber daya |
| yang sama di lebih dari satu direktori sumber daya alternatif. Sebagai gantinya, (dalam beberapa kasus) Anda bisa membuat |
| sumber daya alternatif |
| yang berfungsi sebagai alias untuk sumber daya yang disimpan dalam direktori sumber daya default.</p> |
| |
| <p class="note"><strong>Catatan:</strong> Tidak semua sumber daya menawarkan mekanisme yang memungkinkan Anda |
| membuat alias ke sumber daya lain. Khususnya, animasi, menu, raw, dan |
| sumber daya lain yang tidak ditetapkan dalam direktori {@code xml/} tidak menawarkan fitur ini.</p> |
| |
| <p>Misalnya, bayangkan Anda memiliki ikon aplikasi {@code icon.png}, dan membutuhkan versi uniknya |
| untuk lokal berbeda. Akan tetapi, dua lokal, bahasa Inggris-Kanada dan bahasa Prancis-Kanada, harus menggunakan |
| versi yang sama. Anda mungkin berasumsi bahwa Anda perlu menyalin gambar |
| yang sama ke dalam direktori sumber daya baik untuk bahasa Inggris-Kanada maupun bahasa Prancis-Kanada, namun |
| bukan demikian. Sebagai gantinya, Anda bisa menyimpan gambar yang sama-sama digunakan sebagai {@code icon_ca.png} (nama |
| apa saja selain {@code icon.png}) dan memasukkannya |
| dalam direktori default {@code res/drawable/}. Lalu buat file {@code icon.xml} dalam {@code |
| res/drawable-en-rCA/} dan {@code res/drawable-fr-rCA/} yang mengacu ke sumber daya {@code icon_ca.png} |
| yang menggunakan elemen {@code <bitmap>}. Hal ini memungkinkan Anda menyimpan satu versi saja dari |
| file PNG dan dua file XML kecil yang menunjuk ke sana. (Contoh file XML ditampilkan di bawah.)</p> |
| |
| |
| <h4>Drawable</h4> |
| |
| <p>Untuk membuat alias ke drawable yang ada, gunakan elemen {@code <bitmap>}. |
| Misalnya:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <bitmap xmlns:android="http://schemas.android.com/apk/res/android" |
| android:src="@drawable/icon_ca" /> |
| </pre> |
| |
| <p>Jika Anda menyimpan file ini sebagai {@code icon.xml} (dalam direktori sumber daya alternatif, seperti |
| {@code res/drawable-en-rCA/}), maka file akan dikompilasi menjadi sumber daya yang dapat Anda acu |
| sebagai {@code R.drawable.icon}, namun sebenarnya merupakan alias untuk sumber daya {@code |
| R.drawable.icon_ca} (yang disimpan dalam {@code res/drawable/}).</p> |
| |
| |
| <h4>Layout</h4> |
| |
| <p>Untuk membuat alias ke layout yang ada, gunakan elemen {@code <include>}, |
| yang dibungkus dalam {@code <merge>}. Misalnya:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <merge> |
| <include layout="@layout/main_ltr"/> |
| </merge> |
| </pre> |
| |
| <p>Jika Anda menyimpan file ini sebagai {@code main.xml}, file akan dikompilasi menjadi sumber daya yang dapat Anda acu |
| sebagai {@code R.layout.main}, namun sebenarnya merupakan alias untuk sumber daya {@code R.layout.main_ltr} |
| .</p> |
| |
| |
| <h4>String dan nilai-nilai sederhana lainnya</h4> |
| |
| <p>Untuk membuat alias ke string yang ada, cukup gunakan ID sumber daya |
| dari string yang diinginkan sebagai nilai untuk string baru. Misalnya:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <resources> |
| <string name="hello">Hello</string> |
| <string name="hi">@string/hello</string> |
| </resources> |
| </pre> |
| |
| <p>Sumber daya {@code R.string.hi} sekarang merupakan alias untuk {@code R.string.hello}.</p> |
| |
| <p> <a href="{@docRoot}guide/topics/resources/more-resources.html">Nilai sederhana lainnya</a> sama |
| cara kerjanya. Misalnya, sebuah warna:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <resources> |
| <color name="yellow">#f00</color> |
| <color name="highlight">@color/red</color> |
| </resources> |
| </pre> |
| |
| |
| |
| |
| <h2 id="Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</h2> |
| |
| <p>Agar aplikasi Anda mendukung beberapa konfigurasi perangkat, |
| Anda harus selalu menyediakan sumber daya default untuk setiap tipe sumber daya yang menggunakan aplikasi Anda.</p> |
| |
| <p>Misalnya, jika aplikasi Anda mendukung beberapa bahasa, sertakan selalu direktori {@code |
| values/} (tempat string Anda disimpan) <em>tanpa</em> <a href="#LocaleQualifier">qualifier bahasa dan wilayah</a>. Jika sebaliknya Anda menempatkan semua file |
| string dalam direktori yang memiliki qualifier bahasa dan wilayah, maka aplikasi Anda akan crash saat berjalan |
| pada perangkat yang telah diatur ke bahasa yang tidak didukung string Anda. Namun asalkan Anda menyediakan sumber daya default |
| {@code values/}, aplikasi akan berjalan lancar (meskipun pengguna |
| tidak memahami bahasa itu—, ini lebih baik daripada crash).</p> |
| |
| <p>Demikian pula, jika Anda menyediakan sumber daya layout berbeda berdasarkan orientasi layar, Anda harus |
| memilih satu orientasi sebagai default. Misalnya, sebagai ganti menyediakan sumber daya dalam {@code |
| layout-land/} untuk lanskap dan {@code layout-port/} untuk potret, biarkan salah satu sebagai default, seperti |
| {@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p> |
| |
| <p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada |
| konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan |
| qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru, |
| namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama |
| Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi |
| tidak bisa menggunakan sumber daya yang dinamai dengan qualifier baru. Misalnya, jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code |
| 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 |
| Level 8), maka perangkat API level 4 tidak bisa mengakses sumber daya drawable dan akan crash. Dalam hal |
| ini, Anda mungkin ingin {@code notnight} menjadi sumber daya default, jadi Anda harus mengecualikan |
| qualifier itu agar sumber daya drawable Anda ada dalam {@code drawable/} atau {@code drawable-night/}.</p> |
| |
| <p>Jadi, agar bisa menyediakan kompatibilitas perangkat terbaik, sediakan selalu sumber daya |
| default untuk sumber daya yang diperlukan aplikasi Anda untuk berjalan dengan benar. Selanjutnya buatlah sumber daya |
| alternatif untuk konfigurasi perangkat tertentu dengan menggunakan qualifier konfigurasi.</p> |
| |
| <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 |
| lebih, Anda <em>tidak</em> memerlukan sumber daya drawable default saat menyediakan sumber daya |
| drawable alternatif dengan qualifier <a href="#DensityQualifier">densitas layar</a>. Tanpa sumber daya |
| drawable default sekali pun, Android bisa menemukan yang paling cocok di antara densitas layar alternatif dan menskalakan |
| bitmap sesuai kebutuhan. Akan tetapi, demi pengalaman terbaik pada semua jenis perangkat, Anda harus |
| menyediakan drawable alternatif untuk ketiga tipe densitas.</p> |
| |
| |
| |
| <h2 id="BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</h2> |
| |
| <p>Saat Anda meminta sumber daya yang Anda berikan alternatifnya, Android akan memilih |
| sumber daya alternatif yang akan digunakan saat runtime, bergantung pada konfigurasi perangkat saat ini. Untuk |
| mendemonstrasikan cara Android memilih sumber daya alternatif, anggaplah direktori drawable berikut |
| masing-masing berisi versi berbeda dari gambar yang sama:</p> |
| |
| <pre class="classic no-pretty-print"> |
| drawable/ |
| drawable-en/ |
| drawable-fr-rCA/ |
| drawable-en-port/ |
| drawable-en-notouch-12key/ |
| drawable-port-ldpi/ |
| drawable-port-notouch-12key/ |
| </pre> |
| |
| <p>Dan anggaplah yang berikut ini merupakan konfigurasi perangkatnya:</p> |
| |
| <p style="margin-left:1em;"> |
| Lokal = <code>en-GB</code> <br/> |
| Orientasi layar = <code>port</code> <br/> |
| Densitas piksel layar = <code>hdpi</code> <br/> |
| Tipe layar sentuh = <code>notouch</code> <br/> |
| Metode input teks utama = <code>12key</code> |
| </p> |
| |
| <p>Dengan membandingkan konfigurasi perangkat dengan sumber daya alternatif yang tersedia, Android akan memilih |
| drawable dari {@code drawable-en-port}.</p> |
| |
| <p>Sistem akan menentukan keputusannya mengenai sumber daya yang akan digunakan dengan logika |
| berikut:</p> |
| |
| |
| <div class="figure" style="width:371px"> |
| <img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" /> |
| <p class="img-caption"><strong>Gambar 2.</strong> Bagan alur cara Android menemukan |
| sumber daya yang paling cocok.</p> |
| </div> |
| |
| |
| <ol> |
| <li>Menghapus file sumber daya yang bertentangan dengan konfigurasi perangkat. |
| <p>Direktori <code>drawable-fr-rCA/</code> dihapus karena bertentangan |
| dengan lokal <code>en-GB</code>.</p> |
| <pre class="classic no-pretty-print"> |
| drawable/ |
| drawable-en/ |
| <strike>drawable-fr-rCA/</strike> |
| drawable-en-port/ |
| drawable-en-notouch-12key/ |
| drawable-port-ldpi/ |
| drawable-port-notouch-12key/ |
| </pre> |
| <p class="note"><strong>Eksepsi:</strong> Densitas piksel layar adalah satu qualifier yang |
| tidak dihapus karena bertentangan. Meskipun densitas layar perangkat adalah hdpi, |
| <code>drawable-port-ldpi/</code> tidak dihapus karena setiap densitas layar |
| dianggap cocok untuk saat ini. Informasi selengkapnya tersedia dalam dokumen <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa |
| Layar</a>.</p></li> |
| |
| <li>Pilih qualifier berkedudukan tertinggi (berikutnya) dalam daftar (<a href="#table2">tabel 2</a>). |
| (Mulai dengan MCC, lalu pindah ke bawah.) </li> |
| <li>Apakah salah satu direktori sumber daya menyertakan qualifier ini? </li> |
| <ul> |
| <li>Jika Tidak, kembali ke langkah 2 dan lihat qualifier berikutnya. (Dalam contoh, |
| jawabannya adalah "tidak" hingga qualifier bahasa tercapai.)</li> |
| <li>Jika Ya, lanjutkan ke langkah 4.</li> |
| </ul> |
| </li> |
| |
| <li>Hapus direktori sumber daya yang tidak menyertakan qualifier ini. Dalam contoh, sistem |
| menghapus semua direktori yang tidak menyertakan qualifier bahasa:</li> |
| <pre class="classic no-pretty-print"> |
| <strike>drawable/</strike> |
| drawable-en/ |
| drawable-en-port/ |
| drawable-en-notouch-12key/ |
| <strike>drawable-port-ldpi/</strike> |
| <strike>drawable-port-notouch-12key/</strike> |
| </pre> |
| <p class="note"><strong>Eksepsi:</strong> Jika qualifier yang dimaksud adalah densitas piksel layar, |
| Android akan memilih opsi yang paling cocok dengan densitas layar perangkat. |
| Secara umum, Android lebih suka menurunkan skala gambar asli yang lebih besar daripada menaikkan skala |
| atas gambar asli yang lebih kecil. Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa |
| Layar</a>.</p> |
| </li> |
| |
| <li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi |
| layar adalah qualifier berikutnya yang memiliki kecocokan. |
| Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus: |
| <pre class="classic no-pretty-print"> |
| <strike>drawable-en/</strike> |
| drawable-en-port/ |
| <strike>drawable-en-notouch-12key/</strike> |
| </pre> |
| <p>Direktori yang tersisa adalah {@code drawable-en-port}.</p> |
| </li> |
| </ol> |
| |
| <p>Meskipun prosedur dijalankan untuk setiap sumber daya yang diminta, sistem akan mengoptimalkan beberapa aspek |
| lebih lanjut. Satu optimalisasi tersebut adalah bahwa setelah konfigurasi perangkat diketahui, sistem mungkin |
| akan menghapus sumber daya alternatif yang sama sekali tidak cocok. Misalnya, jika bahasa konfigurasi |
| adalah bahasa Inggris ("en"), maka setiap direktori sumber daya yang memiliki qualifier bahasa akan diatur ke |
| selain bahasa Inggris tidak akan pernah disertakan dalam pool sumber daya yang diperiksa (meskipun |
| direktori sumber daya <em>tanpa</em> qualifier bahasa masih disertakan).</p> |
| |
| <p>Saat memilih sumber daya berdasarkan qualifier ukuran layar, sistem akan menggunakan |
| sumber daya yang didesain untuk layar yang lebih kecil daripada layar saat ini jika tidak ada sumber daya yang lebih cocok |
| (misalnya, layar ukuran besar akan menggunakan sumber daya layar ukuran normal jika diperlukan). Akan tetapi, |
| jika satu-satunya sumber daya yang tersedia <em>lebih besar</em> daripada layar saat ini, sistem |
| <strong>tidak</strong> akan menggunakannya dan aplikasi Anda akan crash jika tidak ada sumber daya lain yang cocok dengan konfigurasi |
| perangkat (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code xlarge}, |
| namun perangkat memiliki ukuran layar normal).</p> |
| |
| <p class="note"><strong>Catatan:</strong> <em>Kedudukan</em> qualifier (dalam <a href="#table2">tabel 2</a>) lebih penting |
| daripada jumlah qualifier yang benar-benar pas dengan perangkat. Misalnya, dalam langkah 4 di atas, pilihan |
| terakhir pada daftar berisi tiga qualifier yang bebar-benar cocok dengan perangkat (orientasi, tipe |
| layar sentuh, dan metode input), sementara <code>drawable-en</code> hanya memiliki satu parameter yang cocok |
| (bahasa). Akan tetapi, bahasa memiliki kedudukan lebih tinggi dari pada qualifier lainnya, sehingga |
| <code>drawable-port-notouch-12key</code> tidak masuk.</p> |
| |
| <p>Untuk mengetahui selengkapnya tentang cara menggunakan sumber daya dalam aplikasi, lanjutkan ke <a href="accessing-resources.html">Mengakses Sumber Daya</a>.</p> |