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@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">@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><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em> 126</pre> 127 128<ul> 129 <li><em>{@code <package_name>}</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 <resource_type>}</em> là lớp con {@code R} cho loại tài nguyên.</li> 132 <li><em>{@code <resource_name>}</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—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<Button 195 android:layout_width="fill_parent" 196 android:layout_height="wrap_content" 197 android:text="<strong>@string/submit</strong>" /> 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@[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em> 207</pre> 208 209<ul> 210 <li>{@code <package_name>} 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 <resource_type>} là lớp con 213{@code R} cho loại tài nguyên.</li> 214 <li>{@code <resource_name>} 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<?xml version="1.0" encoding="utf-8"?> 231<resources> 232 <color name="opaque_red">#f00</color> 233 <string name="hello">Hello!</string> 234</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<?xml version="1.0" encoding="utf-8"?> 242<EditText xmlns:android="http://schemas.android.com/apk/res/android" 243 android:layout_width="fill_parent" 244 android:layout_height="fill_parent" 245 android:textColor="<strong>@color/opaque_red</strong>" 246 android:text="<strong>@string/hello</strong>" /> 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<?xml version="1.0" encoding="utf-8"?> 255<EditText xmlns:android="http://schemas.android.com/apk/res/android" 256 android:layout_width="fill_parent" 257 android:layout_height="fill_parent" 258 android:textColor="<strong>@android:color/secondary_text_dark</strong>" 259 android:text="@string/hello" /> 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<?xml version="1.0" encoding="utf-8"?> 274<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><package_name></em>:][<em><resource_type></em>/]<em><resource_name></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<EditText id="text" 304 android:layout_width="fill_parent" 305 android:layout_height="wrap_content" 306 android:textColor="<strong>?android:textColorSecondary</strong>" 307 android:text="@string/hello_world" /> 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>)—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}<String>(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