1page.title=Truy cập Tài nguyên
2parent.title=Tài nguyên Ứng dụng
3parent.link=index.html
4@jd:body
5
6<div id="qv-wrapper">
7<div id="qv">
8  <h2>Xem nhanh</h2>
9  <ul>
10    <li>Tài nguyên có thể được tham chiếu từ mã bằng các số nguyên từ {@code R.java}, chẳng hạn như
11{@code R.drawable.myimage}</li>
12    <li>Tài nguyên có thể được tham chiếu từ các tài nguyên bằng cách sử dụng một cú pháp XML đặc biệt, ví dụ như {@code
13&#64;drawable/myimage}</li>
14    <li>Bạn cũng có thể truy cập tài nguyên ứng dụng của mình bằng các phương pháp trong
15{@link android.content.res.Resources}</li>
16  </ul>
17
18  <h2>Lớp khóa</h2>
19  <ol>
20    <li>{@link android.content.res.Resources}</li>
21  </ol>
22
23  <h2>Trong tài liệu này</h2>
24  <ol>
25    <li><a href="#ResourcesFromCode">Truy cập Tài nguyên từ Mã</a></li>
26    <li><a href="#ResourcesFromXml">Truy cập Tài nguyên từ XML</a>
27      <ol>
28        <li><a href="#ReferencesToThemeAttributes">Tham chiếu các thuộc tính kiểu</a></li>
29      </ol>
30    </li>
31    <li><a href="#PlatformResources">Truy cập Tài nguyên Nền tảng</a></li>
32  </ol>
33
34  <h2>Xem thêm</h2>
35  <ol>
36    <li><a href="providing-resources.html">Cung cấp Tài nguyên</a></li>
37    <li><a href="available-resources.html">Loại Tài nguyên</a></li>
38  </ol>
39</div>
40</div>
41
42
43
44
45<p>Sau khi cung cấp một tài nguyên trong ứng dụng của mình (đề cập trong <a href="providing-resources.html">Cung cấp Tài nguyên</a>), bạn có thể áp dụng nó bằng cách
46tham chiếu ID tài nguyên đó. Tất cả ID tài nguyên được định nghĩa trong lớp {@code R} dự án của bạn, do
47công cụ {@code aapt} tự động khởi tạo.</p>
48
49<p>Khi ứng dụng của bạn được biên dịch, {@code aapt} khởi tạo lớp {@code R}, trong đó chứa
50ID tài nguyên cho tất cả tài nguyên trong thư mục {@code
51res/} của bạn. Với mỗi loại tài nguyên, có một lớp con {@code R} (ví dụ,
52{@code R.drawable} cho tất cả tài nguyên có thể vẽ), và với mỗi tài nguyên loại đó, có một số nguyên
53tĩnh (ví dụ, {@code R.drawable.icon}). Số nguyên này là ID tài nguyên mà bạn có thể sử dụng
54để truy xuất tài nguyên của mình.</p>
55
56<p>Mặc dù lớp {@code R} là nơi các ID tài nguyên được quy định, bạn sẽ không cần
57tìm ở đó để khám phá một ID tài nguyên. Một ID tài nguyên luôn bao gồm:</p>
58<ul>
59  <li><em>Loại tài nguyên</em>: Mỗi tài nguyên được nhóm vào một "loại," chẳng hạn như {@code
60string}, {@code drawable}, và {@code layout}. Để biết thêm về các loại khác nhau, hãy xem phần <a href="available-resources.html">Loại Tài nguyên</a>.
61  </li>
62  <li><em>Tên tài nguyên</em>, là, hoặc: tên tệp,
63không bao gồm phần mở rộng; hoặc giá trị trong thuộc tính XML {@code android:name}, nếu tài nguyên
64đó là một giá trị đơn giản (chẳng hạn như một xâu).</li>
65</ul>
66
67<p>Có hai cách để bạn có thể truy cập một tài nguyên:</p>
68<ul>
69  <li><strong>Trong mã:</strong> Sử dụng một số nguyên tĩnh từ một lớp con của lớp {@code R}
70của bạn, chẳng hạn như:
71    <pre class="classic no-pretty-print">R.string.hello</pre>
72    <p>{@code string} là loại tài nguyên và {@code hello} là tên tài nguyên. Có nhiều
73API Android mà có thể truy cập các tài nguyên của bạn khi bạn cung cấp một ID tài nguyên theo định dạng này. Xem
74<a href="#ResourcesFromCode">Truy cập Tài nguyên trong Mã</a>.</p>
75  </li>
76  <li><strong>Trong XML:</strong> Sử dụng một cú pháp XML đặc biệt mà cũng tương ứng với
77ID tài nguyên được định nghĩa trong lớp {@code R} của bạn, chẳng hạn như:
78    <pre class="classic no-pretty-print">&#64;string/hello</pre>
79    <p>{@code string} là loại tài nguyên và {@code hello} là tên tài nguyên. Bạn có thể sử dụng cú pháp
80này trong một tài nguyên XML ở bất kỳ nơi nào có kỳ vọng một giá trị mà bạn cung cấp trong một tài nguyên. Xem phần <a href="#ResourcesFromXml">Truy cập Tài nguyên từ XML</a>.</p>
81  </li>
82</ul>
83
84
85
86<h2 id="ResourcesFromCode">Truy cập Tài nguyên trong Mã </h2>
87
88<p>Bạn có thể sử dụng một tài nguyên trong mã bằng cách chuyển ID tài nguyên như một tham số phương pháp. Ví
89dụ, bạn có thể đặt một {@link android.widget.ImageView} để sử dụng tài nguyên {@code res/drawable/myimage.png}
90bằng cách sử dụng {@link android.widget.ImageView#setImageResource(int) setImageResource()}:</p>
91<pre>
92ImageView imageView = (ImageView) findViewById(R.id.myimageview);
93imageView.setImageResource(<strong>R.drawable.myimage</strong>);
94</pre>
95
96<p>Bạn cũng có thể truy xuất các tài nguyên riêng lẻ bằng các phương pháp trong {@link
97android.content.res.Resources}, theo đó bạn có thể nhận được một thực thể
98bằng {@link android.content.Context#getResources()}.</p>
99
100<div class="sidebox-wrapper">
101<div class="sidebox">
102<h2>Truy cập các Tệp Gốc</h2>
103
104<p>Tuy không thường gặp, song bạn có thể cần truy cập các tệp và thư mục gốc của mình. Nếu bạn làm vậy thì việc
105lưu các tệp của bạn trong {@code res/} sẽ không có tác dụng với bạn, vì cách duy nhất để đọc một tài nguyên từ
106{@code res/} đó là bằng ID tài nguyên. Thay vào đó, bạn có thể lưu các tài nguyên của mình trong thư mục
107{@code assets/}.</p>
108<p>Các tệp lưu trong thư mục {@code assets/} <em>không</em> được cấp ID tài nguyên
109, vì thế bạn không thể tham chiếu chúng thông qua lớp {@code R} hoặc từ các tài nguyên XML. Thay vào đó, bạn có thể
110truy vấn các tệp trong thư mục {@code assets/} như một hệ thống tệp bình thường và đọc dữ liệu thô bằng cách sử dụng
111{@link android.content.res.AssetManager}.</p>
112<p>Tuy nhiên, nếu tất cả những gì bạn yêu cầu là khả năng đọc dữ liệu thô (chẳng hạn như một tệp video hoặc âm thanh),
113vậy bạn hãy lưu tệp trong thư mục {@code res/raw/} và đọc một luồng byte bằng cách sử dụng {@link
114android.content.res.Resources#openRawResource(int) openRawResource()}.</p>
115
116</div>
117</div>
118
119
120<h3>Cú pháp</h3>
121
122<p>Sau đây là cú pháp để tham chiếu một tài nguyên trong mã:</p>
123
124<pre class="classic no-pretty-print">
125[<em>&lt;package_name&gt;</em>.]R.<em>&lt;resource_type&gt;</em>.<em>&lt;resource_name&gt;</em>
126</pre>
127
128<ul>
129  <li><em>{@code &lt;package_name&gt;}</em> là tên của gói mà tài nguyên nằm trong đó (không
130bắt buộc khi tham chiếu các tài nguyên từ gói của chính bạn).</li>
131  <li><em>{@code &lt;resource_type&gt;}</em> là lớp con {@code R} cho loại tài nguyên.</li>
132  <li><em>{@code &lt;resource_name&gt;}</em> hoặc là tên tệp tài nguyên
133không có phần mở rộng hoặc là giá trị thuộc tính {@code android:name} trong phần tử XML (đối với các giá trị
134đơn giản).</li>
135</ul>
136<p>Xem phần <a href="available-resources.html">Loại Tài nguyên</a> để
137biết thêm thông tin về mỗi loại tài nguyên và cách tham chiếu chúng.</p>
138
139
140<h3>Trường hợp sử dụng</h3>
141
142<p>Có nhiều phương pháp chấp nhận một tham số ID tài nguyên và bạn có thể truy xuất tài nguyên bằng cách sử dụng
143các phương pháp trong {@link android.content.res.Resources}. Bạn có thể lấy một thực thể {@link
144android.content.res.Resources} bằng {@link android.content.Context#getResources
145Context.getResources()}.</p>
146
147
148<p>Sau đây là một số ví dụ về truy cập tài nguyên trong mã:</p>
149
150<pre>
151// Load a background for the current screen from a drawable resource
152{@link android.app.Activity#getWindow()}.{@link
153android.view.Window#setBackgroundDrawableResource(int)
154setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ;
155
156// Set the Activity title by getting a string from the Resources object, because
157//  this method requires a CharSequence rather than a resource ID
158{@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence)
159setTitle}(getResources().{@link android.content.res.Resources#getText(int)
160getText}(<strong>R.string.main_title</strong>));
161
162// Load a custom layout for the current screen
163{@link android.app.Activity#setContentView(int)
164setContentView}(<strong>R.layout.main_screen</strong>);
165
166// Set a slide in animation by getting an Animation from the Resources object
167mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation)
168setInAnimation}(AnimationUtils.loadAnimation(this,
169        <strong>R.anim.hyperspace_in</strong>));
170
171// Set the text on a TextView object using a resource ID
172TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>);
173msgTextView.{@link android.widget.TextView#setText(int)
174setText}(<strong>R.string.hello_message</strong>);
175</pre>
176
177
178<p class="caution"><strong>Chú ý:</strong> Bạn không nên sửa đổi tệp {@code
179R.java} bằng cách thủ công&mdash;nó được khởi tạo bởi công cụ {@code aapt} khi dự án của bạn được
180biên dịch. Mọi thay đổi đều bị ghi đè vào lần biên dịch tới của bạn.</p>
181
182
183
184<h2 id="ResourcesFromXml">Truy cập Tài nguyên từ XML</h2>
185
186<p>Bạn có thể định nghĩa các giá trị cho một số thuộc tính và phần tử XML bằng cách sử dụng một
187tham chiếu tới một tài nguyên hiện có. Bạn sẽ thường làm điều này khi tạo các tệp bố trí, để
188cung cấp các xâu và hình ảnh cho widget của mình.</p>
189
190<p>Ví dụ, nếu thêm một {@link android.widget.Button} vào bố trí của mình, bạn nên sử dụng
191một <a href="string-resource.html">tài nguyên xâu</a> cho văn bản nút:</p>
192
193<pre>
194&lt;Button
195    android:layout_width="fill_parent"
196    android:layout_height="wrap_content"
197    android:text="<strong>@string/submit</strong>" /&gt;
198</pre>
199
200
201<h3>Cú pháp</h3>
202
203<p>Sau đây là cú pháp để tham chiếu một tài nguyên trong một tài nguyên XML:</p>
204
205<pre class="classic no-pretty-print">
206&#64;[<em>&lt;package_name&gt;</em>:]<em>&lt;resource_type&gt;</em>/<em>&lt;resource_name&gt;</em>
207</pre>
208
209<ul>
210  <li>{@code &lt;package_name&gt;} là tên của gói mà tài nguyên nằm trong đó (không
211bắt buộc khi tham chiếu các tài nguyên từ cùng gói đó)</li>
212  <li>{@code &lt;resource_type&gt;} là lớp con
213{@code R} cho loại tài nguyên.</li>
214  <li>{@code &lt;resource_name&gt;} hoặc là tên tệp tài nguyên
215không có phần mở rộng hoặc là giá trị thuộc tính {@code android:name} trong phần tử XML (đối với các giá trị
216đơn giản).</li>
217</ul>
218
219<p>Xem phần <a href="available-resources.html">Loại Tài nguyên</a> để
220biết thêm thông tin về mỗi loại tài nguyên và cách tham chiếu chúng.</p>
221
222
223<h3>Trường hợp sử dụng</h3>
224
225<p>Trong một số trường hợp bạn phải sử dụng một tài nguyên cho một giá trị trong XML (ví dụ, để áp dụng một hình ảnh có thể vẽ
226cho một widget), nhưng bạn cũng có thể sử dụng một tài nguyên trong XML ở bất kỳ nơi nào chấp nhận một giá trị đơn giản. Ví
227dụ, nếu bạn có tệp tài nguyên sau bao gồm một <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>
228
229<pre>
230&lt;?xml version="1.0" encoding="utf-8"?>
231&lt;resources>
232   &lt;color name="opaque_red">#f00&lt;/color>
233   &lt;string name="hello">Hello!&lt;/string>
234&lt;/resources>
235</pre>
236
237<p>Bạn có thể sử dụng những tài nguyên này trong tệp bố trí sau để đặt màu văn bản và
238xâu văn bản:</p>
239
240<pre>
241&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
242&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
243    android:layout_width=&quot;fill_parent&quot;
244    android:layout_height=&quot;fill_parent&quot;
245    android:textColor=&quot;<strong>&#64;color/opaque_red</strong>&quot;
246    android:text=&quot;<strong>&#64;string/hello</strong>&quot; /&gt;
247</pre>
248
249<p>Trong trường hợp này, bạn không cần quy định tên gói trong tham chiếu tài nguyên đó vì tài nguyên
250xuất phát từ gói của chính bạn. Để
251tham chiếu một tài nguyên hệ thống, bạn sẽ cần đưa vào tên gói. Ví dụ:</p>
252
253<pre>
254&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
255&lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
256    android:layout_width=&quot;fill_parent&quot;
257    android:layout_height=&quot;fill_parent&quot;
258    android:textColor=&quot;<strong>&#64;android:color/secondary_text_dark</strong>&quot;
259    android:text=&quot;&#64;string/hello&quot; /&gt;
260</pre>
261
262<p class="note"><strong>Lưu ý:</strong> Bạn nên sử dụng các tài nguyên xâu
263vào mọi lúc, để ứng dụng của bạn có thể được bản địa hóa cho các ngôn ngữ khác.
264Để biết thông tin về việc tạo các tài nguyên
265thay thế (chẳng hạn như xâu được bản địa hóa), hãy xem phần <a href="providing-resources.html#AlternativeResources">Cung cấp Tài nguyên
266Thay thế</a>. Để được hướng dẫn đầy đủ về việc bản địa hóa ứng dụng của bạn cho các ngôn ngữ khác,
267hãy xem phần <a href="localization.html">Bản địa hóa</a>.</p>
268
269<p>Bạn thậm chí có thể sử dụng tài nguyên trong XML để tạo các bí danh. Ví dụ, bạn có thể tạo một tài nguyên có thể vẽ
270là một bí danh cho một tài nguyên có thể vẽ khác:</p>
271
272<pre>
273&lt;?xml version="1.0" encoding="utf-8"?>
274&lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
275    android:src="@drawable/other_drawable" />
276</pre>
277
278<p>Nghe có vẻ thừa, nhưng có thể rất hữu ích khi sử dụng tài nguyên thay thế. Đọc thêm về
279<a href="providing-resources.html#AliasResources">Tạo tài nguyên bí danh</a>.</p>
280
281
282
283<h3 id="ReferencesToThemeAttributes">Tham chiếu các thuộc tính kiểu</h3>
284
285<p>Một tài nguyên thuộc tính kiểu sẽ cho phép bạn tham chiếu giá trị
286của một thuộc tính trong chủ đề đang áp dụng. Tham chiếu một thuộc tính kiểu sẽ cho phép bạn
287tùy chỉnh diện mạo của các phần tử UI bằng cách tạo kiểu cho chúng để phù hợp với các biến đổi tiêu chuẩn được cung cấp bởi
288chủ đề hiện tại, thay vì cung cấp một giá trị được mã hóa cố định. Tham chiếu một thuộc tính kiểu
289về cơ bản 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>
290
291<p>Để tham chiếu một thuộc tính kiểu, cú pháp tên gần như tương tự với định dạng tài nguyên thường
292, nhưng thay vì biểu tượng @ ({@code @}), hãy sử dụng một dấu hỏi ({@code ?}), và
293phần loại tài nguyên là tùy chọn. Ví dụ:</p>
294
295<pre class="classic">
296?[<em>&lt;package_name&gt;</em>:][<em>&lt;resource_type&gt;</em>/]<em>&lt;resource_name&gt;</em>
297</pre>
298
299<p>Ví dụ, sau đây là cách bạn có thể tham chiếu một thuộc tính để đặt màu văn bản cho phù hợp với màu văn bản
300"chính" của chủ đề hệ thống:</p>
301
302<pre>
303&lt;EditText id=&quot;text&quot;
304    android:layout_width=&quot;fill_parent&quot;
305    android:layout_height=&quot;wrap_content&quot;
306    android:textColor=&quot;<strong>?android:textColorSecondary</strong>&quot;
307    android:text=&quot;&#64;string/hello_world&quot; /&gt;
308</pre>
309
310<p>Ở đây, thuộc tính {@code android:textColor} quy định tên của một thuộc tính kiểu
311trong chủ đề hiện tại. Hiện nay, Android sử dụng giá trị được áp dụng cho thuộc tính kiểu {@code android:textColorSecondary}
312làm giá trị cho {@code android:textColor} trong widget này. Vì công cụ tài nguyên
313hệ thống biết rằng một tài nguyên thuộc tính sẽ được yêu cầu trong ngữ cảnh này,
314bạn không cần nêu rõ loại (mà sẽ là
315<code>?android:attr/textColorSecondary</code>)&mdash;bạn có thể không nêu loại {@code attr}.</p>
316
317
318
319
320<h2 id="PlatformResources">Truy cập Tài nguyên Nền tảng</h2>
321
322<p>Android bao gồm nhiều tài nguyên tiêu chuẩn, chẳng hạn như kiểu, chủ đề và bố trí. Để
323truy cập các tài nguyên này, hãy xác định tham chiếu tài nguyên của bạn bằng tên gói
324<code>android</code>. Ví dụ, Android cung cấp một tài nguyên bố trí bạn có thể sử dụng cho
325các mục danh sách trong một {@link android.widget.ListAdapter}:</p>
326
327<pre>
328{@link android.app.ListActivity#setListAdapter(ListAdapter)
329setListAdapter}(new {@link
330android.widget.ArrayAdapter}&lt;String&gt;(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray));
331</pre>
332
333<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
334nền tảng cho các mục trong một {@link android.widget.ListView}. Bạn có thể sử dụng điều này thay vì tạo
335bố trí riêng của mình cho các mục danh sách. Để biết thêm thông tin, hãy xem phần
336<a href="{@docRoot}guide/topics/ui/layout/listview.html">Dạng xem Danh sách</a> trong hướng dẫn cho nhà phát triển.</p>
337
338