blob: 0054562cde1a49d4c94140a9ef97e43a3369b2db [file] [log] [blame]
page.title=Truy 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>Tài nguyên có th được tham chiếu t mã bng các s nguyên t {@code R.java}, chng hn như
{@code R.drawable.myimage}</li>
<li>Tài nguyên có th được tham chiếu t các tài nguyên bng cách s dng mt cú pháp XML đặc bit, ví d như {@code
&#64;drawable/myimage}</li>
<li>Bn cũng có th truy cp tài nguyên ng dng ca mình bng các phương pháp trong
{@link android.content.res.Resources}</li>
</ul>
<h2>Lp khóa</h2>
<ol>
<li>{@link android.content.res.Resources}</li>
</ol>
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#ResourcesFromCode">Truy cp Tài nguyên t Mã</a></li>
<li><a href="#ResourcesFromXml">Truy cp Tài nguyên t XML</a>
<ol>
<li><a href="#ReferencesToThemeAttributes">Tham chiếu các thuc tính kiu</a></li>
</ol>
</li>
<li><a href="#PlatformResources">Truy cp Tài nguyên Nn tng</a></li>
</ol>
<h2>Xem thêm</h2>
<ol>
<li><a href="providing-resources.html">Cung cp Tài nguyên</a></li>
<li><a href="available-resources.html">Loi Tài nguyên</a></li>
</ol>
</div>
</div>
<p>Sau khi cung cp mt tài nguyên trong ng dng ca mình (đề cp trong <a href="providing-resources.html">Cung cp Tài nguyên</a>), bn có th áp dng nó bng cách
tham chiếu ID tài nguyên đó. Tt c ID tài nguyên được định nghĩa trong lp {@code R} d án ca bn, do
công c {@code aapt} t động khi to.</p>
<p>Khi ng dng ca bn được biên dch, {@code aapt} khi to lp {@code R}, trong đó cha
ID tài nguyên cho tt c tài nguyên trong thư mc {@code
res/} ca bn. Vi mi loi tài nguyên, có mt lp con {@code R} (ví dụ,
{@code R.drawable} cho tt c tài nguyên có th vẽ), và vi mi tài nguyên loi đó, có mt s nguyên
tĩnh (ví dụ, {@code R.drawable.icon}). S nguyên này là ID tài nguyên mà bn có th s dng
để truy xut tài nguyên ca mình.</p>
<p>Mc dù lp {@code R} là nơi các ID tài nguyên được quy định, bn s không cn
tìm đó để khám phá mt ID tài nguyên. Mt ID tài nguyên luôn bao gm:</p>
<ul>
<li><em>Loi tài nguyên</em>: Mi tài nguyên được nhóm vào mt "loại," chng hn như {@code
string}, {@code drawable}, và {@code layout}. Để biết thêm v các loi khác nhau, hãy xem phn <a href="available-resources.html">Loi Tài nguyên</a>.
</li>
<li><em>Tên tài nguyên</em>, là, hoc: tên tp,
không bao gm phn m rng; hoc giá tr trong thuc tính XML {@code android:name}, nếu tài nguyên
đó là mt giá tr đơn gin (chng hn như mt xâu).</li>
</ul>
<p>Có hai cách để bn có th truy cp mt tài nguyên:</p>
<ul>
<li><strong>Trong mã:</strong> S dng mt s nguyên tĩnh t mt lp con ca lp {@code R}
ca bn, chng hn như:
<pre class="classic no-pretty-print">R.string.hello</pre>
<p>{@code string} là loi tài nguyên và {@code hello} là tên tài nguyên. Có nhiu
API Android mà có th truy cp các tài nguyên ca bn khi bn cung cp mt ID tài nguyên theo định dng này. Xem
<a href="#ResourcesFromCode">Truy cp Tài nguyên trong Mã</a>.</p>
</li>
<li><strong>Trong XML:</strong> S dng mt cú pháp XML đặc bit mà cũng tương ng vi
ID tài nguyên được định nghĩa trong lp {@code R} ca bn, chng hn như:
<pre class="classic no-pretty-print">&#64;string/hello</pre>
<p>{@code string} là loi tài nguyên và {@code hello} là tên tài nguyên. Bn có th s dng cú pháp
này trong mt tài nguyên XML bt k nơi nào có k vng mt giá tr mà bn cung cp trong mt tài nguyên. Xem phn <a href="#ResourcesFromXml">Truy cp Tài nguyên t XML</a>.</p>
</li>
</ul>
<h2 id="ResourcesFromCode">Truy cp Tài nguyên trong Mã </h2>
<p>Bn có th s dng mt tài nguyên trong mã bng cách chuyn ID tài nguyên như mt tham s phương pháp. Ví
dụ, bn có th đặt mt {@link android.widget.ImageView} để s dng tài nguyên {@code res/drawable/myimage.png}
bng cách s dng {@link android.widget.ImageView#setImageResource(int) setImageResource()}:</p>
<pre>
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(<strong>R.drawable.myimage</strong>);
</pre>
<p>Bn cũng có th truy xut các tài nguyên riêng l bng các phương pháp trong {@link
android.content.res.Resources}, theo đó bn có th nhn được mt thc th
bng {@link android.content.Context#getResources()}.</p>
<div class="sidebox-wrapper">
<div class="sidebox">
<h2>Truy cp các Tp Gc</h2>
<p>Tuy không thường gp, song bn có th cn truy cp các tp và thư mc gc ca mình. Nếu bn làm vy thì vic
lưu các tp ca bn trong {@code res/} s không có tác dng vi bn, vì cách duy nht để đọc mt tài nguyên t
{@code res/} đó là bng ID tài nguyên. Thay vào đó, bn có th lưu các tài nguyên ca mình trong thư mc
{@code assets/}.</p>
<p>Các tp lưu trong thư mc {@code assets/} <em>không</em> được cp ID tài nguyên
, vì thế bn không th tham chiếu chúng thông qua lp {@code R} hoc t các tài nguyên XML. Thay vào đó, bn có th
truy vn các tp trong thư mc {@code assets/} như mt h thng tp bình thường và đọc d liu thô bng cách s dng
{@link android.content.res.AssetManager}.</p>
<p>Tuy nhiên, nếu tt c nhng gì bn yêu cu là kh năng đọc d liu thô (chng hn như mt tp video hoc âm thanh),
vy bn hãy lưu tp trong thư mc {@code res/raw/} và đọc mt lung byte bng cách s dng {@link
android.content.res.Resources#openRawResource(int) openRawResource()}.</p>
</div>
</div>
<h3>Cú pháp</h3>
<p>Sau đây là cú pháp để tham chiếu mt tài nguyên trong mã:</p>
<pre class="classic no-pretty-print">
[<em>&lt;package_name&gt;</em>.]R.<em>&lt;resource_type&gt;</em>.<em>&lt;resource_name&gt;</em>
</pre>
<ul>
<li><em>{@code &lt;package_name&gt;}</em> là tên ca gói mà tài nguyên nm trong đó (không
bt buc khi tham chiếu các tài nguyên t gói ca chính bn).</li>
<li><em>{@code &lt;resource_type&gt;}</em> là lớp con {@code R} cho loại tài nguyên.</li>
<li><em>{@code &lt;resource_name&gt;}</em> hoc là tên tp tài nguyên
không có phn m rng hoc là giá tr thuc tính {@code android:name} trong phn t XML (đối vi các giá tr
đơn gin).</li>
</ul>
<p>Xem phn <a href="available-resources.html">Loi Tài nguyên</a> để
biết thêm thông tin v mi loi tài nguyên và cách tham chiếu chúng.</p>
<h3>Trường hp s dng</h3>
<p>Có nhiu phương pháp chp nhn mt tham s ID tài nguyên và bn có th truy xut tài nguyên bng cách s dng
các phương pháp trong {@link android.content.res.Resources}. Bn có th ly mt thc th {@link
android.content.res.Resources} bng {@link android.content.Context#getResources
Context.getResources()}.</p>
<p>Sau đây là mt s ví d v truy cp tài nguyên trong mã:</p>
<pre>
// Load a background for the current screen from a drawable resource
{@link android.app.Activity#getWindow()}.{@link
android.view.Window#setBackgroundDrawableResource(int)
setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ;
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID
{@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence)
setTitle}(getResources().{@link android.content.res.Resources#getText(int)
getText}(<strong>R.string.main_title</strong>));
// Load a custom layout for the current screen
{@link android.app.Activity#setContentView(int)
setContentView}(<strong>R.layout.main_screen</strong>);
// Set a slide in animation by getting an Animation from the Resources object
mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation)
setInAnimation}(AnimationUtils.loadAnimation(this,
<strong>R.anim.hyperspace_in</strong>));
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>);
msgTextView.{@link android.widget.TextView#setText(int)
setText}(<strong>R.string.hello_message</strong>);
</pre>
<p class="caution"><strong>Chú ý:</strong> Bn không nên sa đổi tp {@code
R.java} bng cách th công&mdash;nó được khi to bi công c {@code aapt} khi d án ca bn được
biên dch. Mi thay đổi đều b ghi đè vào ln biên dch ti ca bn.</p>
<h2 id="ResourcesFromXml">Truy cp Tài nguyên t XML</h2>
<p>Bn có th định nghĩa các giá tr cho mt s thuc tính và phn t XML bng cách s dng mt
tham chiếu ti mt tài nguyên hin có. Bn s thường làm điu này khi to các tp b trí, để
cung cp các xâu và hình nh cho widget ca mình.</p>
<p>Ví dụ, nếu thêm mt {@link android.widget.Button} vào b trí ca mình, bn nên s dng
mt <a href="string-resource.html">tài nguyên xâu</a> cho văn bản nút:</p>
<pre>
&lt;Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="<strong>@string/submit</strong>" /&gt;
</pre>
<h3>Cú pháp</h3>
<p>Sau đây là cú pháp để tham chiếu mt tài nguyên trong mt tài nguyên XML:</p>
<pre class="classic no-pretty-print">
&#64;[<em>&lt;package_name&gt;</em>:]<em>&lt;resource_type&gt;</em>/<em>&lt;resource_name&gt;</em>
</pre>
<ul>
<li>{@code &lt;package_name&gt;} là tên ca gói mà tài nguyên nm trong đó (không
bt buc khi tham chiếu các tài nguyên t cùng gói đó)</li>
<li>{@code &lt;resource_type&gt;} là lp con
{@code R} cho loi tài nguyên.</li>
<li>{@code &lt;resource_name&gt;} hoc là tên tp tài nguyên
không có phn m rng hoc là giá tr thuc tính {@code android:name} trong phn t XML (đối vi các giá tr
đơn gin).</li>
</ul>
<p>Xem phn <a href="available-resources.html">Loi Tài nguyên</a> để
biết thêm thông tin v mi loi tài nguyên và cách tham chiếu chúng.</p>
<h3>Trường hp s dng</h3>
<p>Trong mt s trường hp bn phi s dng mt tài nguyên cho mt giá tr trong XML (ví dụ, để áp dng mt hình nh có th v
cho mt widget), nhưng bn cũng có th s dng mt tài nguyên trong XML bt k nơi nào chp nhn mt giá tr đơn gin. Ví
dụ, nếu bn có tp tài nguyên sau bao gm mt <a href="more-resources.html#Color">tài nguyên màu</a> và một <a href="string-resource.html">tài nguyên xâu</a>:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;resources>
&lt;color name="opaque_red">#f00&lt;/color>
&lt;string name="hello">Hello!&lt;/string>
&lt;/resources>
</pre>
<p>Bn có th s dng nhng tài nguyên này trong tp b trí sau để đặt màu văn bn và
xâu văn bn:</p>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;
android:textColor=&quot;<strong>&#64;color/opaque_red</strong>&quot;
android:text=&quot;<strong>&#64;string/hello</strong>&quot; /&gt;
</pre>
<p>Trong trường hp này, bn không cn quy định tên gói trong tham chiếu tài nguyên đó vì tài nguyên
xut phát t gói ca chính bn. Để
tham chiếu mt tài nguyên h thng, bn s cn đưa vào tên gói. Ví dụ:</p>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;
android:textColor=&quot;<strong>&#64;android:color/secondary_text_dark</strong>&quot;
android:text=&quot;&#64;string/hello&quot; /&gt;
</pre>
<p class="note"><strong>Lưu ý:</strong> Bn nên s dng các tài nguyên xâu
vào mi lúc, để ng dng ca bn có th được bn địa hóa cho các ngôn ng khác.
Để biết thông tin v vic to các tài nguyên
thay thế (chng hn như xâu được bn địa hóa), hãy xem phn <a href="providing-resources.html#AlternativeResources">Cung cp Tài nguyên
Thay thế</a>. Để được hướng dn đầy đủ v vic bn địa hóa ng dng ca bn cho các ngôn ng khác,
hãy xem phn <a href="localization.html">Bn địa hóa</a>.</p>
<p>Bn thm chí có th s dng tài nguyên trong XML để to các bí danh. Ví dụ, bn có th to mt tài nguyên có th v
là mt bí danh cho mt tài nguyên có th v khác:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/other_drawable" />
</pre>
<p>Nghe có v tha, nhưng có th rt hu ích khi s dng tài nguyên thay thế. Đọc thêm v
<a href="providing-resources.html#AliasResources">To tài nguyên bí danh</a>.</p>
<h3 id="ReferencesToThemeAttributes">Tham chiếu các thuc tính kiu</h3>
<p>Mt tài nguyên thuc tính kiu s cho phép bn tham chiếu giá tr
ca mt thuc tính trong ch đề đang áp dng. Tham chiếu mt thuc tính kiu s cho phép bn
tùy chnh din mo ca các phn t UI bng cách to kiu cho chúng để phù hp vi các biến đổi tiêu chun được cung cp bi
ch đề hin ti, thay vì cung cp mt giá tr được mã hóa c định. Tham chiếu mt thuc tính kiu
v cơ bn mà nói, là "sử dụng kiểu được định nghĩa bởi thuộc tính này, trong chủ đề hiện tại."</p>
<p>Để tham chiếu mt thuc tính kiu, cú pháp tên gn như tương t vi định dng tài nguyên thường
, nhưng thay vì biu tượng @ ({@code @}), hãy s dng mt du hi ({@code ?}), và
phn loi tài nguyên là tùy chn. Ví dụ:</p>
<pre class="classic">
?[<em>&lt;package_name&gt;</em>:][<em>&lt;resource_type&gt;</em>/]<em>&lt;resource_name&gt;</em>
</pre>
<p>Ví dụ, sau đây là cách bn có th tham chiếu mt thuc tính để đặt màu văn bn cho phù hp vi màu văn bn
"chính" ca ch đề h thng:</p>
<pre>
&lt;EditText id=&quot;text&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;wrap_content&quot;
android:textColor=&quot;<strong>?android:textColorSecondary</strong>&quot;
android:text=&quot;&#64;string/hello_world&quot; /&gt;
</pre>
<p> đây, thuc tính {@code android:textColor} quy định tên ca mt thuc tính kiu
trong ch đề hin ti. Hin nay, Android s dng giá tr được áp dng cho thuc tính kiu {@code android:textColorSecondary}
làm giá tr cho {@code android:textColor} trong widget này. Vì công c tài nguyên
h thng biết rng mt tài nguyên thuc tính s được yêu cu trong ng cnh này,
bn không cn nêu rõ loi (mà s là
<code>?android:attr/textColorSecondary</code>)&mdash;bạn có thể không nêu loại {@code attr}.</p>
<h2 id="PlatformResources">Truy cp Tài nguyên Nn tng</h2>
<p>Android bao gm nhiu tài nguyên tiêu chun, chng hn như kiu, ch đề và b trí. Để
truy cp các tài nguyên này, hãy xác định tham chiếu tài nguyên ca bn bng tên gói
<code>android</code>. Ví dụ, Android cung cp mt tài nguyên b trí bn có th s dng cho
các mc danh sách trong mt {@link android.widget.ListAdapter}:</p>
<pre>
{@link android.app.ListActivity#setListAdapter(ListAdapter)
setListAdapter}(new {@link
android.widget.ArrayAdapter}&lt;String&gt;(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray));
</pre>
<p>Trong ví d này, {@link android.R.layout#simple_list_item_1} là một tài nguyên bố trí được định nghĩa bởi
nn tng cho các mc trong mt {@link android.widget.ListView}. Bn có th s dng điu này thay vì to
b trí riêng ca mình cho các mc danh sách. Để biết thêm thông tin, hãy xem phn
<a href="{@docRoot}guide/topics/ui/layout/listview.html">Dng xem Danh sách</a> trong hướng dẫn cho nhà phát triển.</p>