blob: ef1c6b6d4c7732b0451f3e0e8db5f1b3ce1af060 [file] [log] [blame]
page.title=Cung cp Tài nguyên
parent.title=Tài nguyên ng dng
parent.link=index.html
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Xem nhanh</h2>
<ul>
<li>Các loi tài nguyên khác nhau thuc v các thư mc con khác nhau ca {@code res/}</li>
<li>Tài nguyên thay thế cung cp các tp tài nguyên theo cu hình c thể</li>
<li>Luôn bao gm tài nguyên mc định để ng dng ca bn không ph thuc vào các
cu hình thiết b c thể</li>
</ul>
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#ResourceTypes">Nhóm các Loi Tài nguyên li</a></li>
<li><a href="#AlternativeResources">Cung cp Tài nguyên Thay thế</a>
<ol>
<li><a href="#QualifierRules">Quy tc v tên hn định</a></li>
<li><a href="#AliasResources">To tài nguyên bí danh</a></li>
</ol>
</li>
<li><a href="#Compatibility">Cung cp Tính tương thích gia Thiết b vi Tài nguyên Tt nht</a></li>
<li><a href="#BestMatch">Cách Android tìm Tài nguyên Khp Tt nht</a></li>
</ol>
<h2>Xem thêm</h2>
<ol>
<li><a href="accessing-resources.html">Truy cp Tài nguyên</a></li>
<li><a href="available-resources.html">Loi Tài nguyên</a></li>
<li><a href="{@docRoot}guide/practices/screens_support.html">H tr Nhiu
Màn hình</a></li>
</ol>
</div>
</div>
<p>Bn nên luôn ngoi hin hóa các tài nguyên ng dng chng hn như hình nh và xâu t mã
ca mình, sao cho bn có th duy trì chúng mt cách độc lp. Bn cũng nên cung cp tài nguyên thay thế cho
cu hình thiết b c th bng cách nhóm chúng li trong nhng thư mc tài nguyên đích danh. Trong
thi gian chy, Android s s dng tài nguyên phù hp da trên cu hình hin ti. Ví
dụ, bn có th mun cung cp mt b trí UI khác ph thuc vào kích c màn hình hoc các xâu
khác nhau ph thuc vào thiết đặt ngôn ngữ.</p>
<p>Sau khi ngoi hin hóa các tài nguyên ng dng ca mình, bn có th truy cp chúng
bng cách s dng các ID tài nguyên được khi to trong lp {@code R} ca d án ca bn. Cách s dng
tài nguyên trong ng dng ca bn được trình bày trong phn <a href="accessing-resources.html">Truy cp
Tài nguyên</a>. Tài liu này trình bày vi bn cách nhóm các tài nguyên li trong d án Android ca bn và
cung cp tài nguyên thay thế cho nhng cu hình thiết b c thể.</p>
<h2 id="ResourceTypes">Nhóm các Loi Tài nguyên li</h2>
<p>Bn nên đặt tng loi tài nguyên vào mt thư mc con c th trong thư mc
{@code res/} d án ca mình. Ví dụ, sau đây là phân cp tp ca mt d án đơn gin:</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>Như bn có th thy trong ví d này, thư mc {@code res/} cha tt c tài nguyên (trong
các thư mc con): mt tài nguyên hình nh, hai tài nguyên b trí, các thư mc{@code mipmap/} cho biu tượng ca trình khi chy
, và mt tp tài nguyên xâu. Tên thư mc
tài nguyên có vai trò quan trng và được mô t trong bng 1.</p>
<p class="note"><strong>Lưu ý:</strong> Để biết thêm thông tin v cách s dng thư mc mipmap, hãy xem phn
<a href="{@docRoot}tools/projects/index.html#mipmap">Tng quan v Qun lý D án</a>.</p>
<p class="table-caption" id="table1"><strong>Bng 1.</strong> Các thư mc tài nguyên
được h tr bên trong thư mc {@code res/} ca d án.</p>
<table>
<tr>
<th scope="col">Thư mc</th>
<th scope="col">Loi Tài nguyên</th>
</tr>
<tr>
<td><code>animator/</code></td>
<td>Tp XML định nghĩa <a href="{@docRoot}guide/topics/graphics/prop-animation.html">các hot hình
tính cht</a>.</td>
</tr>
<tr>
<td><code>anim/</code></td>
<td>Tp XML định nghĩa <a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">các hot hình
tween</a>. (Các hot hình tính cht cũng có th được lưu trong thư mc này, nhưng
thư mc {@code animator/} được ưu tiên cho hot hình tính cht để phân bit gia hai
loi này.)</td>
</tr>
<tr>
<td><code>color/</code></td>
<td>Tp XML định nghĩa mt danh sách trng thái các màu. Xem phn <a href="color-list-resource.html">Tài nguyên
Danh sách Trng thái Màu</a></td>
</tr>
<tr>
<td><code>drawable/</code></td>
<td><p>Tp bitmap ({@code .png}, {@code .9.png}, {@code .jpg}, {@code .gif}) hoc tp XML
được biên dch thành các loi tài nguyên con v được sau:</p>
<ul>
<li>Tp bitmap</li>
<li>Nine-Patche (tp bitmap có th thay đổi kích cỡ)</li>
<li>Danh sách trng thái</li>
<li>Hình</li>
<li>Ni dung v được hot hình</li>
<li>Ni dung v được khác</li>
</ul>
<p>Xem phn <a href="drawable-resource.html">Tài nguyên V được</a>.</p>
</td>
</tr>
<tr>
<td><code>mipmap/</code></td>
<td>Tp v được cho các mt độ biu tượng trình khi chy khác nhau. Để biết thêm thông tin v vic qun lý
các biu tượng trình khi chy bng thư mc {@code mipmap/}, xem phn
<a href="{@docRoot}tools/project/index.html#mipmap">Tng quan v Qun lý D án</a>.</td>
</tr>
<tr>
<td><code>layout/</code></td>
<td>Tp XML định nghĩa mt b trí giao din người dùng.
Xem phn <a href="layout-resource.html">Tài nguyên B trí</a>.</td>
</tr>
<tr>
<td><code>menu/</code></td>
<td>Tp XML định nghĩa các menu ng dng, chng hn như Menu Tùy chn, Menu Ng cnh, hoc Menu
Con. Xem phn <a href="menu-resource.html">Tài nguyên Menu</a>.</td>
</tr>
<tr>
<td><code>raw/</code></td>
<td><p>Tp tùy ý để lưu trong dng thô ca chúng. Để m nhng tài nguyên có mt
{@link java.io.InputStream} thô này, hãy gi {@link android.content.res.Resources#openRawResource(int)
Resources.openRawResource()} bng ID tài nguyên, chính là {@code R.raw.<em>filename</em>}.</p>
<p>Tuy nhiên, nếu cn truy cp tên tp gc và phân cp tp, bn có th xem xét
lưu mt s tài nguyên trong thư mc {@code
assets/} (thay vì {@code res/raw/}). Các tp trong {@code assets/} không được cp
ID tài nguyên, vì thế bn ch có th đọc chúng bng cách s dng {@link android.content.res.AssetManager}.</p></td>
</tr>
<tr>
<td><code>values/</code></td>
<td><p>Tp XML cha các giá tr đơn gin, chng hn như xâu, s nguyên, và màu sc.</p>
<p>Trong đó, tp tài nguyên XML trong các thư mc con {@code res/} khác định nghĩa mt tài nguyên đơn l
da trên tên tp XML, tp trong thư mc {@code values/} s mô t nhiu ngun.
Đối vi tp trong thư mc này, mi phn t con ca phn t {@code &lt;resources&gt;} li định nghĩa mt tài nguyên
duy nht. Ví dụ, phn t {@code &lt;string&gt;} to tài nguyên
{@code R.string} và phn t {@code &lt;color&gt;} to tài nguyên {@code R.color}
.</p>
<p>Vì mi tài nguyên được định nghĩa bng phn t XML ca chính nó, bn có th đặt tên tp
theo cách mình mun và đặt các loi tài nguyên khác nhau vào mt tp. Tuy nhiên, để gii thích rõ, bn có th
mun đặt các loi tài nguyên duy nht vào nhng tp khác nhau. Ví dụ, sau đây là mt s quy ước
tên tp cho các tài nguyên mà bn có th to trong thư mc này:</p>
<ul>
<li>arrays.xml cho mng tài nguyên (<a href="more-resources.html#TypedArray">mng có phân loi</a>).</li>
<li>colors.xml cho <a href="more-resources.html#Color">giá tr màu</a></li>
<li>dimens.xml cho <a href="more-resources.html#Dimension">giá tr kích thước</a>.</li>
<li>strings.xml cho <a href="string-resource.html">giá tr
xâu</a>.</li>
<li>styles.xml cho <a href="style-resource.html">kiu</a>.</li>
</ul>
<p>Xem các phn <a href="string-resource.html">Tài nguyên Xâu</a>,
<a href="style-resource.html">Tài nguyên Kiu</a>, và
<a href="more-resources.html">các Loi Tài nguyên khác</a>.</p>
</td>
</tr>
<tr>
<td><code>xml/</code></td>
<td>Tp XML tùy ý mà có th được đọc vào thi gian chy bng cách gi {@link
android.content.res.Resources#getXml(int) Resources.getXML()}. Các tệp cấu hình XML khác nhau
phi được lưu đây, chng hn như mt <a href="{@docRoot}guide/topics/search/searchable-config.html">cu hình có th tìm kiếm</a>.
<!-- or preferences configuration. --></td>
</tr>
</table>
<p class="caution"><strong>Chú ý:</strong> Không được lưu tp tài nguyên trc tiếp vào trong thư mc
{@code res/}&mdash;nó s gây ra li vi trình biên dch.</p>
<p>Để biết thêm thông tin v các loi tài nguyên, hãy xem tài liu <a href="available-resources.html">Các Loi Tài nguyên</a>.</p>
<p>Tài nguyên mà bn lưu trong thư mc con được định nghĩa trong bng 1 là nhng tài nguyên "mặc định"
ca bn. C thể, nhng tài nguyên này định nghĩa thiết kế và ni dung mc định cho ng dng ca bn.
Tuy nhiên, các loi thiết b da trên nn tng Android khác nhau có th gi các loi tài nguyên khác nhau.
Ví dụ, nếu mt thiết b có mt màn hình ln hơn bình thường, khi đó bn nên cung cp
các tài nguyên b trí khác nhau để tn dng din tích màn hình tăng thêm. Hoc, nếu mt thiết b có
thiết đặt ngôn ng khác, khi đó bn nên cung cp các tài nguyên xâu khác để biên dch
văn bn trong giao din người dùng ca mình. Để cung cp nhng tài nguyên khác nhau này cho các cu hình
thiết b khác nhau, bn cn cung cp tài nguyên thay thế bên cnh nhng tài nguyên
mc định ca mình.</p>
<h2 id="AlternativeResources">Cung cp Tài nguyên Thay thế</h2>
<div class="figure" style="width:429px">
<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
<p class="img-caption">
<strong>Hình 1.</strong> Hai thiết bị khác nhau, mỗi thiết bị sử dụng các tài nguyên bố trí khác nhau.</p>
</div>
<p>Hu như mi ng dng đều nên cung cp các tài nguyên thay thế để h tr nhng cu hình
thiết b c thể. Ví dụ, bn nên bao gm các tài nguyên v được thay thế cho các mt độ
màn hình khác nhau và tài nguyên xâu thay thế cho các ngôn ng khác nhau. Vào thi gian chy, Android
s phát hin cu hình thiết b hin ti và ti các tài nguyên
tương ng cho ng dng ca bn.</p>
<p>Để quy định các phương án thay thế theo cu hình c th cho mt tp hp tài nguyên:</p>
<ol>
<li>To mt thư mc mi trong {@code res/} có tên theo dng {@code
<em>&lt;resources_name&gt;</em>-<em>&lt;config_qualifier&gt;</em>}.
<ul>
<li><em>{@code &lt;resources_name&gt;}</em> là tên thư mc ca các tài nguyên mc định tương ng
(được định nghĩa trong bng 1).</li>
<li><em>{@code &lt;qualifier&gt;}</em> là tên quy định mt cu hình riêng
mà nhng tài nguyên này s được s dng cho nó (được định nghĩa trong bng 2).</li>
</ul>
<p>Bn có th ni nhiu hơn mt <em>{@code &lt;qualifier&gt;}</em>. Tách riêng tng cái
bng mt nét gch.</p>
<p class="caution"><strong>Chú ý:</strong> Khi ni nhiu hn định, bn phi
đặt chúng theo cùng th t lit kê trong bng 2. Nếu các hn định được xếp th t
sai, tài nguyên s b b qua.</p>
</li>
<li>Lưu các tài nguyên thay thế tương ng vào thư mc mi này. Tp tài nguyên phi được
đặt tên đúng như các tp tài nguyên mc định.</li>
</ol>
<p>Ví dụ, sau đây là mt s tài nguyên mc định và thay thế:</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>Hn định {@code hdpi} cho biết rng các tài nguyên trong thư mc đó áp dng cho nhng thiết b có
màn hình mt độ cao. Hình nh trong tng thư mc v được này được định c cho mt mt độ
màn hình c thể, nhưng tên tp thì
ging ht. Bng cách này, ID tài nguyên mà bn s dng để tham chiếu {@code icon.png} hoc hình nh {@code
background.png} luôn như nhau, nhưng Android s chn
phiên bn ca tng tài nguyên cho khp tt nht vi thiết b hin ti, bng cách so sánh thông tin cu hình thiết b
vi các hn định v tên thư mc tài nguyên.</p>
<p>Android h tr mt vài hn định cu hình và bn có th
thêm nhiu hn định vào mt tên thư mc, bng cách tách riêng tng hn định bng mt nét gch. Bng 2
lit kê các hn định cu hình hp lệ, theo th t ưu tiên&mdash;nếu bn s dng nhiu
hn định cho mt thư mc tài nguyên, bn phi thêm chúng vào tên thư mc theo th t được lit kê trong
bng.</p>
<p class="table-caption" id="table2"><strong>Bng 2.</strong> Tên ca hn định
cu hình.</p>
<table>
<tr>
<th>Cu hình</th>
<th>Giá tr Hn định</th>
<th>Mô tả</th>
</tr>
<tr id="MccQualifier">
<td>MCC và MNC</td>
<td>Ví dụ:<br/>
<code>mcc310</code><br/>
<code><nobr>mcc310-mnc004</nobr></code><br/>
<code>mcc208-mnc00</code><br/>
v.v.
</td>
<td>
<p>Mã quc gia di động (MCC), đằng sau có th là mã mng di động (MNC)
t th SIM trong thiết bị. Ví dụ, <code>mcc310</code> Hoa K đối vi mi nhà mng,
<code>mcc310-mnc004</code> ở Hoa Kỳ đối với Verizon, và <code>mcc208-mnc00</code> Pháp đối vi
Orange.</p>
<p>Nếu thiết b s dng mt kết ni vô tuyến in thoi GSM), các giá tr MCC và MNC s ly
t th SIM.</p>
<p>Bn cũng có th s dng ch MCC (ví dụ, để đưa các tài nguyên
pháp lý theo quc gia c th vào ng dng ca bn). Nếu bn cn quy định ch da trên ngôn ngữ, hãy s dng hn định
<em>ngôn ng và khu vc</em> để thay thế (được trình bày phn tiếp theo). Nếu bn quyết định s dng hn định MCC và
MNC, bn nên cn thn và kim tra xem nó có hot động như k vng không.</p>
<p>Ngoài ra, cũng xem các trường cu hình {@link
android.content.res.Configuration#mcc}, và {@link
android.content.res.Configuration#mnc}, tương ứng cho biết mã quốc gia di động và
mã mng di động hin ti.</p>
</td>
</tr>
<tr id="LocaleQualifier">
<td>Ngôn ng và khu vc</td>
<td>Ví dụ:<br/>
<code>en</code><br/>
<code>fr</code><br/>
<code>en-rUS</code><br/>
<code>fr-rFR</code><br/>
<code>fr-rCA</code><br/>
v.v.
</td>
<td><p>Ngôn ng được định nghĩa bng mt mã ngôn ng <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO
639-1</a> gm hai ch cái, có th theo sau là mt mã khu vc
<a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO
3166-1-alpha-2</a> dài hai ch cái (đằng trước là "{@code r}" chữ thường).
</p><p>
Các mã <em>không</em> phân biệt chữ hoa/thường; tin t {@code r} được s dng để
phân bit phn khu vc.
Bn không th ch quy định mt khu vc.</p>
<p>Điu này có th thay đổi trong sut vòng đời
ng dng ca bn nếu người dùng thay đổi ngôn ng ca mình trong cài đặt h thng. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để biết thông tin v
nh hưởng có th có ca thay đổi này ti ng dng ca bn trong thi gian chy.</p>
<p>Xem phn <a href="localization.html">Bn địa hóa</a> để biết hướng dn đầy đủ v vic bn địa hóa
ng dng ca bn cho các ngôn ng khác.</p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#locale}, trong đó
cho biết địa phương hin ti.</p>
</td>
</tr>
<tr id="LayoutDirectionQualifier">
<td>Ch hướng B trí</td>
<td><code>ldrtl</code><br/>
<code>ldltr</code><br/>
</td>
<td><p>Ch hướng b trí ca ng dng ca bn. {@code ldrtl} có nghĩa là "chỉ-hướng-bố-trí-phải-qua-trái".
{@code ldltr} có nghĩa là "chỉ-hướng-bố-trí-trái-qua-phải" và là giá tr không biu th mc định.
</p>
<p>Điu này có th áp dng cho bt k tài nguyên nào, chng hn như b trí, ni dung v được hoc giá trị.
</p>
<p>Ví dụ, nếu bn mun cung cp mt b trí c th cho ngôn ng Ả-rp và mt
b trí chung nào đó cho bt k ngôn ng phi-qua-trái" nào khác (như chữ Ba Tư hoặc Do Thái), vậy bạn sẽ phải:
</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>Lưu ý:</strong> Để kích hoạt các tính năng bố trí phải-qua-trái
cho ứng dụng của mình, bạn phải đặt <a href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code
supportsRtl}</a> thành {@code "true"} và đặt <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> thành 17 trở lên.</p>
<p><em>Được thêm trong API mc 17.</em></p>
</td>
</tr>
<tr id="SmallestScreenWidthQualifier">
<td>smallestWidth</td>
<td><code>sw&lt;N&gt;dp</code><br/><br/>
Ví dụ:<br/>
<code>sw320dp</code><br/>
<code>sw600dp</code><br/>
<code>sw720dp</code><br/>
v.v.
</td>
<td>
<p>Kích c cơ bn ca mt màn hình, th hin bng kích thước ngn nht ca khu vc màn hình
kh dng. C thể, smallestWidth ca thiết b bng khong ngn nht gia chiu cao và chiu rng
kh dng ca màn hình (bn cũng có th gi là "chiều rộng nhỏ nhất có thể" cho màn hình). Bn có th
s dng hn định này để đảm bo rng, không ph thuc vào hướng hin ti ca màn hình, ng dng
ca bn có ít nht {@code &lt;N&gt;} dp chiu rng kh dng cho UI ca mình.</p>
<p>Ví dụ, nếu b trí ca bn yêu cu rng kích thước nh nht ca khu vc màn hình ti thiu
phi luôn bng 600 dp, vy bn có th s dng hn định này để to các tài nguyên b trí, {@code
res/layout-sw600dp/}. H thng s ch s dng nhng tài nguyên này khi kích thước nh nht ca
màn hình kh dng ti thiu bng 600dp, không ph thuc vào cnh 600dp là chiu cao hay chiu rng
theo nhn thc ca người dùng. SmallestWidth là đặc trưng kích c màn hình c định ca thiết bị; <strong>smallestWidth ca
thiết b không thay đổi khi hướng ca màn hình thay đổi</strong>.</p>
<p>SmallestWidth ca mt thiết b s xem xét c trang trí màn hình và UI h thng. Ví
dụ, nếu thiết b có mt s phn t UI c định trên màn hình mà chiếm mt khong trng dc
theo trc smallestWidth, h thng s khai báo smallestWidth nh hơn kích c màn hình
thc tế, bi chúng là nhng đim nh màn hình không kh dng cho UI ca bn. Vì thế, giá tr mà bn s dng
nên là kích thước nh nht thc tế <em>mà b trí ca bn yêu cu</em> (thông thường, giá tr này bng
"chiều rộng nhỏ nhất" mà b trí ca bn h trợ, không ph thuc vào hướng hin ti ca màn hình).</p>
<p>Mt s giá tr mà bn có th s dng đây đối vi các kích c màn hình ph biến:</p>
<ul>
<li>320, cho các thiết b có cu hình màn hình như:
<ul>
<li>240x320 ldpi (thiết b cm tay QVGA)</li>
<li>320x480 mdpi (thiết b cm tay)</li>
<li>480x800 hdpi (thiết b cm tay mt độ cao)</li>
</ul>
</li>
<li>480, đối vi nhng màn hình như 480x800 mdpi (máy tính bng/thiết b cm tay).</li>
<li>600, đối vi nhng màn hình như 600x1024 mdpi (máy tính bng 7").</li>
<li>720, đối với những màn hình như 720x1280 mdpi (máy tính bảng 10").</li>
</ul>
<p>Khi ng dng ca bn cung cp nhiu thư mc tài nguyên vi nhng giá tr khác nhau cho
hn định smallestWidth, h thng s s dng hn định gn nht vi (không vượt quá)
smallestWidth ca thiết bị. </p>
<p><em>Được thêm trong API mc 13.</em></p>
<p>Xem thêm thuc tính <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code
android:requiresSmallestWidthDp}</a>, trong đó khai báo smallestWidth ti thiu mà ng dng ca bn
tương thích vi, và trường cu hình {@link
android.content.res.Configuration#smallestScreenWidthDp}, trong đó lưu trữ giá trị
smallestWidth ca thiết bị.</p>
<p>Để biết thêm thông tin v vic thiết kế cho các màn hình khác nhau và s dng hn định
này, hãy xem hướng dn dành cho nhà phát trin <a href="{@docRoot}guide/practices/screens_support.html">H tr
Nhiu Màn hình</a>.</p>
</td>
</tr>
<tr id="ScreenWidthQualifier">
<td>Chiu rng kh dng</td>
<td><code>w&lt;N&gt;dp</code><br/><br/>
Ví dụ:<br/>
<code>w720dp</code><br/>
<code>w1024dp</code><br/>
v.v.
</td>
<td>
<p>Quy định mt chiu rng màn hình kh dng ti thiu theo đơn v {@code dp} mà ti đó, tài nguyên
nên được s dng&mdash;được định nghĩa bi giá tr <code>&lt;N&gt;</code>. Giá tr
cu hình này s thay đổi khi hướng
thay đổi gia kh ngang và dc để khp vi chiu rng thc tế hin ti.</p>
<p>Khi ng dng ca bn cung cp nhiu thư mc tài nguyên vi nhng giá tr khác nhau
cho cu hình này, h thng s s dng giá tr gn nht vi (không vượt quá)
chiu rng hin ti ca màn hình. Giá tr
đây xét c trang trí trên màn hình, vì thế nếu thiết b có mt s
phn t UI c định cnh trái hoc phi ca màn hình, nó
s s dng mt giá tr cho chiu rng nh hơn kích c màn hình thc sự, dùng
cho nhng phn t UI này và làm gim khong trng kh dng ca ng dng.</p>
<p><em>Được thêm trong API mc 13.</em></p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#screenWidthDp}
mà cha chiu rng màn hình hin ti.</p>
<p>Để biết thêm thông tin v vic thiết kế cho các màn hình khác nhau và s dng hn định
này, hãy xem hướng dn dành cho nhà phát trin <a href="{@docRoot}guide/practices/screens_support.html">H tr
Nhiu Màn hình</a>.</p>
</td>
</tr>
<tr id="ScreenHeightQualifier">
<td>Chiu cao kh dng</td>
<td><code>h&lt;N&gt;dp</code><br/><br/>
Ví dụ:<br/>
<code>h720dp</code><br/>
<code>h1024dp</code><br/>
v.v.
</td>
<td>
<p>Quy định chiu cao màn hình kh dng ti thiu theo đơn v "dp" mà ti đó tài nguyên
nên được s dng&mdash;được định nghĩa bi giá tr <code>&lt;N&gt;</code>. Giá tr
cu hình này s thay đổi khi hướng
thay đổi gia kh ngang và dc để khp vi chiu cao thc tế hin ti.</p>
<p>Khi ng dng ca bn cung cp nhiu thư mc tài nguyên vi nhng giá tr khác nhau
cho cu hình này, h thng s s dng giá tr gn nht vi (không vượt quá)
chiu cao hin ti ca màn hình. Giá tr
đây xét c trang trí trên màn hình, vì thế nếu thiết b có mt s
phn t UI c định trên cnh trên hoc dưới ca màn hình, nó s s dng
mt giá tr cho chiu cao nh hơn kích c màn hình thc sự, dùng
cho nhng phn t UI này và làm gim khong trng kh dng ca ng dng. Trang trí
trên màn hình mà không c định (chng hn như thanh trng thái ca đin thoi mà có th được
n khi toàn màn hình) <em>không</em> được xét đây, c
nhng trang trí trên ca s như thanh tiêu đề hay thanh hành động cũng vy, vì thế ng dng phi được chun b để
x lý mt khong trng nh hơn mc mà chúng quy định.
<p><em>Được thêm trong API mc 13.</em></p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#screenHeightDp}
mà cha chiu rng màn hình hin ti.</p>
<p>Để biết thêm thông tin v vic thiết kế cho các màn hình khác nhau và s dng hn định
này, hãy xem hướng dn dành cho nhà phát trin <a href="{@docRoot}guide/practices/screens_support.html">H tr
Nhiu Màn hình</a>.</p>
</td>
</tr>
<tr id="ScreenSizeQualifier">
<td>Kích c màn hình</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}: Các màn hình có kích c tương t như màn hình
QVGA mt độ thp. Kích c b trí ti thiu đối vi mt màn hình nh
bng xp x 320x426 đơn v dp. Các ví d như QVGA mt độ thp và VGA mt độ
cao.</li>
<li>{@code normal}: Các màn hình có kích c tương t như màn hình
HVGA mt độ trung bình. Kích c b trí ti thiu
đối vi mt màn hình bình thường bng xp x 320x470 đơn v dp. Ví d
v nhng màn hình như vy là WQVGA mt độ thp, HVGA mt độ trung bình, WVGA
mt độ cao.</li>
<li>{@code large}: Các màn hình có kích c tương t như màn hình
VGA mt độ trung bình.
Kích c b trí ti thiu đối vi mt màn hình ln bng xp x 480x640 đơn v dp.
Ví d như các màn hình mt độ trung bình VGA và WVGA.</li>
<li>{@code xlarge}: Các màn hình ln hơn đáng k so vi màn hình
HVGA mt độ trung bình truyn thng. Kích c b trí ti thiu đối vi mt màn hình siêu ln
bng xp x 720x960 đơn v dp. Trong hu hết trường hp, nhng thiết b có màn hình
siêu ln s quá ln để mang trong túi và gn như là
thiết b kiu máy tính bng. <em>Được thêm trong API mc 9.</em></li>
</ul>
<p class="note"><strong>Lưu ý:</strong> Vic s dng mt hn định kích c không hàm ý rng các
tài nguyên <em>chỉ</em> áp dng cho màn hình có kích c đó. Nếu bn không cung cp cho các tài nguyên
thay thế vi các hn định khp tt hơn vi cu hình thiết b hin ti, h thng có th s dng
bt k tài nguyên nào <a href="#BestMatch">phù hp nht</a>.</p>
<p class="caution"><strong>Chú ý:</strong> Nếu tt c tài nguyên ca bn s dng mt hn định kích c
<em>ln hơn</em> màn hình hiện tại, hệ thống sẽ <strong>không</strong> s dng chúng và
ng dng ca bn s b li vào thi gian chy (ví dụ, nếu tt c tài nguyên b trí được gn th hn định {@code
xlarge} nhưng thiết b li có màn hình kích c bình thường).</p>
<p><em>Được thêm trong API mc 4.</em></p>
<p>Xem <a href="{@docRoot}guide/practices/screens_support.html">H tr Nhiu
Màn hình</a> để biết thêm thông tin.</p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#screenLayout},
đó cho biết màn hình là màn hình nhỏ, bình thường,
hay ln.</p>
</td>
</tr>
<tr id="ScreenAspectQualifier">
<td>T l màn hình</td>
<td>
<code>long</code><br/>
<code>notlong</code>
</td>
<td>
<ul class="nolist">
<li>{@code long}: Màn hình dài, chng hn như WQVGA, WVGA, FWVGA</li>
<li>{@code notlong}: Màn hình không dài, chng hn như QVGA, HVGA và VGA</li>
</ul>
<p><em>Được thêm trong API mc 4.</em></p>
<p>Giá tr này thun túy được da trên t l khung nh ca màn hình (màn hình "dài" s rng hơn). Nó
không liên quan ti hướng ca màn hình.</p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#screenLayout},
đó cho biết màn hình có dài không.</p>
</td>
</tr>
<tr id="OrientationQualifier">
<td>Hướng ca màn hình</td>
<td>
<code>port</code><br/>
<code>land</code> <!-- <br/>
<code>square</code> -->
</td>
<td>
<ul class="nolist">
<li>{@code port}: Thiết b hướng đứng (thng đứng)</li>
<li>{@code land}: Thiết b kh ngang (nm ngang)</li>
<!-- Square mode is currently not used. -->
</ul>
<p>Giá tr này có th thay đổi trong sut vòng đời ng dng ca bn nếu người dùng xoay
màn hình. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để biết thông tin v
nh hưởng ca điu này ti ng dng ca bn trong thi gian chy.</p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#orientation}, trong đó
cho biết hướng thiết b hin ti.</p>
</td>
</tr>
<tr id="UiModeQualifier">
<td>Chế độ 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}: Thiết b đang hin th trong đế gn trên ô-tô</li>
<li>{@code desk}: Thiết b đang hin th trong đế gn trên bàn</li>
<li>{@code television}: Thiết b đang hin th trên mt TV, mang đến mt
tri nghim "10 foot" (3 mét) trong đó UI ca nó nm trên mt màn hình ln
cách xa người dùng, được định hướng ch yếu quanh DPAD hoc cách
tương tác không s dng con trỏ khác</li>
<li>{@code appliance}: Thiết b đang đóng vai trò như mt dng c không
có màn hình hin thị</li>
<li>{@code watch}: Thiết b có mt màn hình hin th và được đeo trên c tay</li>
</ul>
<p><em>Được thêm trong API mc 8, TV được thêm trong API 13, đồng h được thêm trong API 20.</em></p>
<p>Để biết thông tin v cách ng dng ca bn hi đáp khi thiết b được cm vào hoc
rút khi đế, hãy đọc <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Xác định
và Theo dõi Trng thái và Loi Đế</a>.</p>
<p>Giá tr này có th thay đổi trong sut vòng đời ng dng ca bn nếu người dùng đặt
thiết b vào đế. Bn có th kích hot hoc vô hiu hóa mt s chế độ này bng cách s dng {@link
android.app.UiModeManager}. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để
biết thông tin v nh hưởng ca điu này ti ng dng ca bn trong thi gian chy.</p>
</td>
</tr>
<tr id="NightQualifier">
<td>Chế độ ban đêm</td>
<td>
<code>night</code><br/>
<code>notnight</code>
</td>
<td>
<ul class="nolist">
<li>{@code night}: Thi gian ban đêm</li>
<li>{@code notnight}: Thi gian ban ngày</li>
</ul>
<p><em>Được thêm trong API mc 8.</em></p>
<p>Giá tr này có th thay đổi trong sut vòng đời ng dng ca bn nếu chế độ ban đêm được để
chế độ t động (mc định), trong trường hp đó chế độ s thay đổi da vào thi gian trong ngày. Bn có th kích hot
hoc vô hiu hóa chế độ này bng cách s dng {@link android.app.UiModeManager}. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để biết thông tin v nh hưởng ca điu này ti
ng dng ca bn trong thi gian chy.</p>
</td>
</tr>
<tr id="DensityQualifier">
<td>Mt độ đim nh màn hình (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}: Màn hình mt độ thp; xp x 120dpi.</li>
<li>{@code mdpi}: Màn hình mt độ trung bình (trên HVGA truyn thng); xp x
160dpi.</li>
<li>{@code hdpi}: Màn hình mt độ cao; xp x 240dpi.</li>
<li>{@code xhdpi}: Màn hình mt độ siêu cao; xp x 320dpi. <em>Được thêm trong API
Mc 8</em></li>
<li>{@code xxhdpi}: Màn hình mt độ siêu siêu cao; xp x 480dpi. <em>Được thêm trong API
Mc 16</em></li>
<li>{@code xxxhdpi}: Mt độ siêu siêu siêu cao s dng (ch biu tượng trình khi chy, xem
<a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">ghi chú</a>
trong <em>H tr Nhiu Màn hình</em>); xp x 640dpi. <em>Được thêm trong API
Mc 18</em></li>
<li>{@code nodpi}: Loi này có th được s dng cho tài nguyên bitmap mà bn không mun được định c
cho khp vi mt độ ca thiết bị.</li>
<li>{@code tvdpi}: Màn hình trong khong gia mdpi và hdpi; xp x 213dpi. Đây
không được coi là nhóm mt độ "cơ bản". Nó được dành ch yếu cho TV và hu hết
các ng dng không cn nó&mdash;vi điu kin các tài nguyên mdpi và hpdi đủ cho hu hết ng dng
và h thng s định c chúng cho phù hp. Hn định này đã được gii thiu vi API mc 13.</li>
</ul>
<p>Có t l định c 3:4:6:8:12:16 gia sáu mt độ cơ bn (b qua mt độ
tvdpi). Vì thế, mt tp bimap 9x9 trong ldpi s bng 12x12 trong mdpi, 18x18 trong hdpi, 24x24 trong xhdpi, v.v.
</p>
<p>Nếu bn quyết định rng tài nguyên hình nh ca mình không đủ đẹp trên TV hoc
mt s thiết b khác và mun th tài nguyên tvdpi, h s định c s bng 1,33*mdpi. Ví
dụ, mt hình nh 100px x 100px đối vi màn hình mdpi s bng 133px x 133px đối vi tvdpi.</p>
<p class="note"><strong>Lưu ý:</strong> Vic s dng mt hn định mt độ không hàm ý rng các
tài nguyên <em>chỉ</em> áp dng cho màn hình có mt độ đó. Nếu bn không cung cp cho các tài nguyên
thay thế vi các hn định khp tt hơn vi cu hình thiết b hin ti, h thng có th s dng
bt k tài nguyên nào <a href="#BestMatch">phù hp nht</a>.</p>
<p>Xem <a href="{@docRoot}guide/practices/screens_support.html">H tr Nhiu
Màn hình</a> để biết thêm thông tin v cách x lý các mt độ màn hình khác nhau và cách Android
có th định c bitmap ca mình cho va vi mt độ hin ti.</p>
</td>
</tr>
<tr id="TouchscreenQualifier">
<td>Loi màn hình cm ng</td>
<td>
<code>notouch</code><br/>
<code>finger</code>
</td>
<td>
<ul class="nolist">
<li>{@code notouch}: Thiết b không có màn hình cm ng.</li>
<li>{@code finger}: Thiết b có màn hình cm ng để
được s dng thông qua tương tác hướng ca ngón tay ca người dùng.</li>
</ul>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#touchscreen},
nó cho biết loi màn hình cm ng trên thiết bị.</p>
</td>
</tr>
<tr id="KeyboardAvailQualifier">
<td>S sn có ca bàn phím</td>
<td>
<code>keysexposed</code><br/>
<code>keyshidden</code><br/>
<code>keyssoft</code>
</td>
<td>
<ul class="nolist">
<li>{@code keysexposed}: Thiết b có sn mt bàn phím. Nếu thiết b có mt
bàn phím mm được kích hot (có kh năng), giá tr này có th được s dng khi bàn phím cng
<em>không</em> hin th trước người dùng, ngay c khi thiết b không có bàn phím cng. Nếu không có
bàn phím mm hoc bàn phím mm b vô hiu hóa, khi đó giá tr này ch được s dng khi mt bàn phím cng được
hin thị.</li>
<li>{@code keyshidden}: Thiết b có sn mt bàn phím cng nhưng nó b
n đi <em>và </em> thiết bị <em>không</em> có bàn phím mm được kích hot.</li>
<li>{@code keyssoft}: Thiết b có mt bàn phím mm được kích hot dù nó có
hin th hay không.</li>
</ul>
<p>Nếu bn cung cp các tài nguyên <code>keysexposed</code>, nhưng không cung cấp tài nguyên <code>keyssoft</code>
, h thng s s dng tài nguyên <code>keysexposed</code> mà không ph thuc vào vic có hin th
bàn phím hay không, min là h thng có kích hot mt bàn phím mm.</p>
<p>Giá tr này có th thay đổi trong vòng đời ng dng ca bn nếu người dùng m mt bàn phím
cng. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để biết thông tin v
nh hưởng ca điu này ti ng dng ca bn trong thi gian chy.</p>
<p>Xem thêm các trường cu hình {@link
android.content.res.Configuration#hardKeyboardHidden} và {@link
android.content.res.Configuration#keyboardHidden}, theo đó tương ứng cho biết mức độ hiển thị của bàn phím
cng và mc độ hin th ca bt k loi bàn phím nào (bao gm bàn phím mm).</p>
</td>
</tr>
<tr id="ImeQualifier">
<td>Phương pháp nhp liu văn bn chính</td>
<td>
<code>nokeys</code><br/>
<code>qwerty</code><br/>
<code>12key</code>
</td>
<td>
<ul class="nolist">
<li>{@code nokeys}: Thiết b không có phím cng cho vic nhp liu văn bn.</li>
<li>{@code qwerty}: Thiết b có mt bàn phím qwerty cng, dù nó có hin th vi
người dùng
hay không.</li>
<li>{@code 12key}: Thiết b có mt bàn phím 12-phím cng, dù nó có hin th vi
người dùng hay không.</li>
</ul>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#keyboard}, trong đó
cho biết phương pháp nhp liu văn bn chính sn có.</p>
</td>
</tr>
<tr id="NavAvailQualifier">
<td>S sn có ca phím điu hướng</td>
<td>
<code>navexposed</code><br/>
<code>navhidden</code>
</td>
<td>
<ul class="nolist">
<li>{@code navexposed}: Có sn phím điu hướng cho người dùng.</li>
<li>{@code navhidden}: Không có sn phím điu hướng (chng hn như phía sau mt np
đóng).</li>
</ul>
<p>Giá tr này có th thay đổi trong sut vòng đời ng dng ca bn nếu người dùng làm hin
phím điu hướng. Xem phn <a href="runtime-changes.html">X lý Thay đổi Thi gian chy</a> để
biết thông tin v nh hưởng ca điu này ti ng dng ca bn trong thi gian chy.</p>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#navigationHidden},
đó có cho biết các phím điu hướng có b n không.</p>
</td>
</tr>
<tr id="NavigationQualifier">
<td>Phương pháp điu hướng không cm ng chính</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}: Thiết b không có phương tin điu hướng ngoài cách s dng
màn hình cm ng.</li>
<li>{@code dpad}: Thiết b có bàn điu hướng (d-pad) để điu hướng.</li>
<li>{@code trackball}: Thiết b có bi xoay để điu hướng.</li>
<li>{@code wheel}: Thiết b có bánh xe điu hướng để điu hướng (không ph biến).</li>
</ul>
<p>Xem thêm trường cu hình {@link android.content.res.Configuration#navigation}, trong đó
cho biết loi phương pháp điu hướng sn có.</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>Phiên bản Nền tảng (Mức API)</td>
<td>Ví dụ:<br/>
<code>v3</code><br/>
<code>v4</code><br/>
<code>v7</code><br/>
v.v.</td>
<td>
<p>Mức API được hỗ trợ bởi thiết bị. Ví dụ, <code>v1</code> đối với API mức
1 (thiết bị ở phiên bản Android 1.0 hoặc cao hơn) và <code>v4</code> đối với API mức 4 (thiết bị ở phiên bản Android
1.6 hoặc cao hơn). Xem tài liệu <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Mức API của Android</a> để biết thêm thông tin
v nhng giá tr này.</p>
</td>
</tr>
</table>
<p class="note"><strong>Lưu ý:</strong> Mt s hn định cu hình đã được thêm k t phiên bn Android
1.0, vì thế không phi tt c phiên bn Android đều h tr tt c hn định. Vic s dng mt hn định mi s hàm ý
thêm hn định phiên bn nn tng sao cho các thiết b cũ hơn chc chn s b qua nó. Ví dụ, s dng
mt hn định <code>w600dp</code> sẽ tự động bao gồm hạn định <code>v13</code>, vì
hn định chiu rng kh dng mi có trong API mc 13. Để tránh bt k s c nào, hãy luôn đưa vào mt tp hp
các tài nguyên mc định (tp hp các tài nguyên <em>không có hn định</em>). Để biết thêm thông tin, hãy xem phn
nói v <a href="#Compatibility">Cung cp Tính tương thích gia Thiết b vi Tài nguyên
Tt nht</a>.</p>
<h3 id="QualifierRules">Quy tc v tên hn định</h3>
<p>Sau đây là mt s quy tc v vic s dng tên ca hn định cu hình:</p>
<ul>
<li>Bn có th quy định nhiu hn định cho mt tp hp đơn l các tài nguyên, được tách riêng bi du gch ngang. Ví
dụ, <code>drawable-en-rUS-land</code> s áp dng cho các thiết b US-English hướng
kh ngang.</li>
<li>Các hn định phi theo th t lit kê trong <a href="#table2">bng 2</a>. Ví
dụ:
<ul>
<li>Sai: <code>drawable-hdpi-port/</code></li>
<li>Đúng: <code>drawable-port-hdpi/</code></li>
</ul>
</li>
<li>Các thư mc tài nguyên thay thế không được lng nhau. Ví dụ, bn không được có
<code>res/drawable/drawable-en/</code>.</li>
<li>Các giá tr không phân bit ch hoa/thường. Trình biên dch tài nguyên s chuyn tên thư mc
thành ch thường trước khi x lý để tránh các vn đề xy ra trên h thng tp
không phân bit ch hoa/thường. Bt k vic đổi sang ch hoa nào trong tên ch nhm mc đích d đọc hơn.</li>
<li>Ch h tr mt giá tr cho mi loi hn định. Ví dụ, nếu bn mun s dng
cùng các tp v được cho tiếng Tây Ban Nha và tiếng Pháp, bn <em>không thể</em> đặt tên thư mc là
<code>drawable-rES-rFR/</code>. Thay vào đó, bn cn hai thư mc tài nguyên chng hn như
<code>drawable-rES/</code> và <code>drawable-rFR/</code>, trong đó cha các tp phù hp.
Tuy nhiên, bn không bt buc thc s phi to bn sao các tp như nhau c hai v trí. Thay vào đó, bn có th
to mt bí danh ti mt tài nguyên. Xem phn <a href="#AliasResources">To
tài nguyên bí danh</a> ở bên dưới.</li>
</ul>
<p>Sau khi bn lưu tài nguyên thay thế vào các thư mc được đặt tên bng
nhng hn định này, Android s t động áp dng các tài nguyên trong ng dng ca bn da trên
cu hình thiết b hin ti. C mi ln yêu cu mt tài nguyên, Android li kim tra các thư mc tài nguyên
thay thế cha tp tài nguyên được yêu cu, ri <a href="#BestMatch">tìm tài nguyên
so khp phù hp nht</a> (được trình bày bên dưới). Nếu không có tài nguyên thay thế khp
vi mt cu hình thiết b c thể, khi đó Android s s dng các tài nguyên mc định tương ng (
tp hp các tài nguyên cho mt loi tài nguyên c th không bao gm hn định
cu hình).</p>
<h3 id="AliasResources">To tài nguyên bí danh</h3>
<p>Khi bn có mt tài nguyên mun s dng cho nhiu hơn mt cu hình
thiết b (nhưng không mun cung cp làm tài nguyên mc định), bn không cn đặt
cùng tài nguyên đó vào nhiu hơn mt thư mc tài nguyên thay thế. Thay vào đó, bn có th (trong mt s trường hp) to mt tài nguyên
thay thế
đóng vai trò như mt bí danh cho tài nguyên được lưu trong thư mc tài nguyên mc định ca bn.</p>
<p class="note"><strong>Lưu ý:</strong> Không phi tt c tài nguyên đều đưa ra cơ chế mà theo đó bn có th
to mt bí danh ti mt tài nguyên khác. C thể, hot hình, menu, tài nguyên thô và các tài nguyên
không được quy định khác trong thư mc {@code xml/} không cung cp tính năng này.</p>
<p>Ví dụ, hãy tưởng tượng bn có mt biu tượng ng dng, {@code icon.png}, và cn phiên bn duy nht ca
nó cho các bn địa khác nhau. Tuy nhiên, hai bn địa English-Canadian và French-Canadian, cn
s dng cùng phiên bn. Bn có th gi s rng mình cn sao chép cùng hình nh
vào thư mc tài nguyên cho c English-Canadian và French-Canadian, nhưng điu đó
không đúng. Thay vào đó, bn có th lưu hình nh được s dng cho c hai thành {@code icon_ca.png} (bt k
tên nào khác ngoài {@code icon.png}) và đặt
nó vào thư mc {@code res/drawable/} mc định. Sau đó, to mt tp {@code icon.xml} trong {@code
res/drawable-en-rCA/} và {@code res/drawable-fr-rCA/} tham chiếu ti tài nguyên {@code icon_ca.png}
bng cách s dng phn t {@code &lt;bitmap&gt;}. Điu này cho phép bn lưu tr ch mt phiên bn ca tp
PNG và hai tp XML nh tr ti nó. (Ví d v tp XML được trình bày bên dưới.)</p>
<h4>Ni dung v được</h4>
<p>Để to mt bí danh cho mt ni dung v được đang tn ti, hãy s dng phn t {@code &lt;bitmap&gt;}.
Ví dụ:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon_ca" />
</pre>
<p>Nếu bn lưu tp này thành {@code icon.xml} (trong mt thư mc tài nguyên thay thế chng hn như
{@code res/drawable-en-rCA/}), nó s được biên dch vào mt tài nguyên mà bn
có th tham chiếu như là {@code R.drawable.icon}, nhưng thc tế li là bí danh cho tài nguyên {@code
R.drawable.icon_ca} (được lưu trong {@code res/drawable/}).</p>
<h4>B trí</h4>
<p>Để to mt bí danh cho mt b trí hin ti, hãy s dng phn t {@code &lt;include&gt;}
, được bc trong mt {@code &lt;merge&gt;}. Ví dụ:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;merge>
&lt;include layout="@layout/main_ltr"/>
&lt;/merge>
</pre>
<p>Nếu bn lưu tp này thành {@code main.xml}, nó s được biên dch thành mt tài nguyên mà bn có th tham chiếu
như là {@code R.layout.main}, nhưng thc tế li là mt bí danh cho tài nguyên {@code R.layout.main_ltr}
.</p>
<h4>Xâu và các giá tr đơn gin khác</h4>
<p>Để to mt bí danh cho mt xâu hin có, ch cn s dng ID tài nguyên ca xâu
mong mun làm giá tr cho xâu mi. Ví dụ:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;resources>
&lt;string name="hello">Hello&lt;/string>
&lt;string name="hi">@string/hello&lt;/string>
&lt;/resources>
</pre>
<p>Tài nguyên {@code R.string.hi} lúc này là mt bí danh cho {@code R.string.hello}.</p>
<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">Các giá tr đơn gin khác</a> cũng
hot động tương tự. Ví dụ, màu sc:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;resources>
&lt;color name="yellow">#f00&lt;/color>
&lt;color name="highlight">@color/red&lt;/color>
&lt;/resources>
</pre>
<h2 id="Compatibility">Cung cp Tính tương thích gia Thiết b vi Tài nguyên Tt nht</h2>
<p>Để ng dng ca bn h tr nhiu cu hình thiết bị, mt điu rt quan trng đó là
bn luôn cung cp các tài nguyên mc định cho tng loi tài nguyên mà ng dng ca bn s dng.</p>
<p>Ví dụ, nếu ng dng ca bn h tr vài ngôn ngữ, hãy luôn bao gm mt thư mc {@code
values/} (trong đó, xâu ca bn được lưu) <em>mà không cn</em> một <a href="#LocaleQualifier">hạn định ngôn ngữ và khu vực</a>. Nếu thay vào đó bn đặt tt c tp xâu ca mình
vào các thư mc có mt hn định ngôn ng và khu vc, khi đó ng dng ca bn s b li khi chy
trên mt thiết b được đặt mt ngôn ng mà các xâu ca bn không h trợ. Nhưng min là bn cung cp các tài nguyên
{@code values/} mc định, khi đó ng dng ca bn s chy bình thường (ngay c khi người dùng không
hiu ngôn ng đó&mdash;vy còn tt hơn là b li).</p>
<p>Tương tự, nếu bn cung cp các tài nguyên b trí khác nhau da trên hướng ca màn hình, bn nên
chn mt hướng làm mc định ca mình. Ví dụ, thay vì cung cp tài nguyên b trí trong {@code
layout-land/} cho kh ngang và {@code layout-port/} cho kh dc, hãy để mt cái làm mc định, chng hn như
{@code layout/} đối vi kh ngang và {@code layout-port/} đối vi kh dc.</p>
<p>Vic cung cp tài nguyên mc định quan trng không ch bi ng dng ca bn có th chy trên mt
cu hình mà bn chưa nghĩ đến, mà còn bi các phiên bn Android mi đôi khi thêm
hn định cu hình mà nhng phiên bn cũ hơn không h trợ. Nếu bn s dng mt hn định tài nguyên mi,
nhưng vn duy trì tính tương thích v mã vi các phiên bn cũ hơn ca Android thì khi mt phiên bn cũ hơn ca
Android chy trên ng dng ca bn, nó s b li nếu bn không cung cp tài nguyên mc định, do nó
không th s dng tài nguyên được đặt tên bng hn định mi. Ví dụ, nếu <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
minSdkVersion}</a> của bạn được đặt bằng 4, và bạn xác định tất cả tài nguyên vẽ được của mình bằng cách sử dụng <a href="#NightQualifier">chế độ ban đêm</a> ({@code night} hoc {@code notnight}, đã được thêm trong API
Mc 8), khi đó mt thiết b API mc 4 s không th truy cp tài nguyên v được ca bn và s b li. Trong trường hp
này, bn có th mun {@code notnight} làm tài nguyên mc định ca mình, vì thế bn nên loi tr hn định
đó sao cho tài nguyên v được ca bn trong {@code drawable/} hoc {@code drawable-night/}.</p>
<p>Vì vy, để mang li kh năng tương thích vi thiết b tt nht, hãy luôn cung cp tài nguyên
mc định cho nhng tài nguyên mà ng dng ca bn cn thc hin đúng cách. Sau đó, hãy to tài nguyên
thay thế cho các cu hình thiết b c th bng cách s dng hn định cu hình.</p>
<p>Có mt ngoi l đối vi quy tc này: Nếu <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> ca ng dng ca bn bng 4 hoc
ln hơn, bn <em>không</em> cn đến tài nguyên v được mc định khi cung cp tài nguyên
v được thay thế bng hn định <a href="#DensityQualifier">mt độ màn hình</a>. K c khi không có
tài nguyên v được mc định, Android cũng có th tìm thy kết qu khp tt nht trong s các mt độ màn hình thay thế và s định c
bitmap nếu cn. Tuy nhiên, để có tri nghim tt nht trên tt c thiết bị, bn nên
cung cp ni dung v được thay thế cho c ba loi mt độ.</p>
<h2 id="BestMatch">Cách Android tìm Tài nguyên Khp Tt nht</h2>
<p>Khi bn yêu cu mt tài nguyên mà bn cung cp ni dung thay thế cho nó, Android s la chn
tài nguyên thay thế để s dng vào thi gian chy, tùy vào cu hình thiết b hin ti. Để
din t cách Android la chn mt tài nguyên thay thế, gi s có các thư mc v được sau,
mi thư mc li cha các phiên bn khác nhau ca cùng hình nh:</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>Và gi s cu hình thiết b như sau:</p>
<p style="margin-left:1em;">
Bn địa = <code>en-GB</code> <br/>
Hướng màn hình = <code>port</code> <br/>
Mt độ đim nh màn hình = <code>hdpi</code> <br/>
Loi màn hình cm ng = <code>notouch</code> <br/>
Phương pháp nhp liu văn bn chính = <code>12key</code>
</p>
<p>Bng cách so sánh cu hình thiết b vi các tài nguyên thay thế sn có, Android s la chn
ni dung v được t {@code drawable-en-port}.</p>
<p>H thng ra quyết định ca mình v các tài nguyên nào s s dng bng lô-gic
sau:</p>
<div class="figure" style="width:371px">
<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" />
<p class="img-caption"><strong>Hình 2.</strong> Lưu đồ v cách Android tìm tài nguyên
khp tt nht.</p>
</div>
<ol>
<li>Loi b các tp tài nguyên mà trái vi cu hình thiết bị.
<p>Thư mc <code>drawable-fr-rCA/</code> b loi b vì nó
trái vi bn địa <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>Ngoi lệ:</strong> Mt độ đim nh màn hình là mt hn định không
b loi b do trái ngược. Mc dù mt độ màn hình ca thiết b là hdpi,
<code>drawable-port-ldpi/</code> không b loi b vì mi mt độ màn hình đều
được coi là mt kết qu khp ti thi đim này. Bn có th tham kho thêm thông tin trong tài liu <a href="{@docRoot}guide/practices/screens_support.html">H tr Nhiu
Màn hình</a>.</p></li>
<li>Chn hn định có mc ưu tiên cao nht (tiếp theo) trong danh sách (<a href="#table2">bng 2</a>).
(Bt đầu bng MCC, sau đó di chuyn xung.) </li>
<li>Có thư mc tài nguyên nào bao gm hn định này không? </li>
<ul>
<li>Nếu Không, hãy quay li bước 2 và tìm vi hn định tiếp theo. (Trong ví dụ,
câu tr li là "không" ti khi đi đến hn định ngôn ngữ.)</li>
<li>Nếu Có, tiếp tc sang bước 4.</li>
</ul>
</li>
<li>Loi b các thư mc tài nguyên không bao gm hn định này. Trong ví dụ, h thng
s loi b tt c thư mc không bao gm hn định ngôn ngữ:</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>Ngoi lệ:</strong> Nếu hn định đang xét là mt độ đim nh màn hình,
Android s chn tùy chn khp gn nht vi mt độ màn hình ca thiết bị.
Nhìn chung, Android ưu tiên gim kích c mt hình nh ban đầu ln hơn thay vì tăng kích c mt hình nh ban đầu
nh hơn. Xem phn <a href="{@docRoot}guide/practices/screens_support.html">H tr Nhiu
Màn hình</a>.</p>
</li>
<li>Quay li và lp li các bước 2, 3 và 4 ti khi ch còn li mt thư mc. Trong ví dụ, hướng
màn hình là hn định tiếp theo nếu có kết qu khp.
Vì thế, các tài nguyên không quy định hướng màn hình s b loi bỏ:
<pre class="classic no-pretty-print">
<strike>drawable-en/</strike>
drawable-en-port/
<strike>drawable-en-notouch-12key/</strike>
</pre>
<p>Thư mc còn li là {@code drawable-en-port}.</p>
</li>
</ol>
<p>Mc dù quy trình này được thc thi cho tng tài nguyên được yêu cu, h thng s ti ưu hóa hơn na
mt s khía cnh. Mt cách ti ưu hóa như vy đó là sau khi biết cu hình thiết bị, nó có th
loi b các tài nguyên thay thế mà không th khp được. Ví dụ, nếu ngôn ng cu hình
là English ("en"), khi đó bt k thư mc tài nguyên nào có hn định ngôn ng được đặt thành
ngôn ng khác English đều s không được bao gm trong tp hp các tài nguyên được kim tra (mc dù
thư mc tài nguyên <em>không có</em> hạn định ngôn ngữ vẫn được bao gồm).</p>
<p>Khi la chn tài nguyên da trên hn định kích c màn hình, h thng s s dng các tài nguyên
được thiết kế cho màn hình nh hơn màn hình hin ti nếu không có tài nguyên nào khp tt hơn
(ví dụ, mt màn hình kích c ln s s dng các tài nguyên màn hình kích c bình thường nếu cn). Tuy nhiên, nếu
nhng tài nguyên duy nht sn có li <em>ln hơn</em> màn hình hin ti, h thng s
<strong>không</strong> s dng chúng và ng dng ca bn s b li nếu không có tài nguyên nào khác khp vi cu hình
thiết b (ví dụ, nếu tt c tài nguyên b trí đều được gn th bng hn định {@code xlarge},
nhưng thiết b li có mt màn hình kích c bình thường).</p>
<p class="note"><strong>Lưu ý:</strong> <em>Mức ưu tiên</em> ca hn định (trong <a href="#table2">bng 2</a>) quan trng
hơn s lượng hn định khp chính xác vi thiết bị. Ví dụ, trong bước 4 bên trên
la chn trên danh sách bao gm ba hn định khp chính xác vi thiết b (hướng, loi
màn hình cm ng, và phương pháp nhp liu), trong khi <code>drawable-en</code> ch có mt tham s khp
(ngôn ngữ). Tuy nhiên, ngôn ng có mc ưu tiên cao hơn c ba hn định khác này, vì thế
<code>drawable-port-notouch-12key</code> bị loại.</p>
<p>Để tìm hiu thêm v cách s dng tài nguyên trong ng dng ca bn, hãy tiếp tc sang phn <a href="accessing-resources.html">Truy cp Tài nguyên</a>.</p>