lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Truy cập Tài nguyên

Sau khi cung cấp một tài nguyên trong ứng dụng của mình (đề cập trong Cung cấp Tài nguyên), bạn có thể áp dụng nó bằng cách tham chiếu ID tài nguyên đó. Tất cả ID tài nguyên được định nghĩa trong lớp R dự án của bạn, do công cụ aapt tự động khởi tạo.

Khi ứng dụng của bạn được biên dịch, aapt khởi tạo lớp R, trong đó chứa ID tài nguyên cho tất cả tài nguyên trong thư mục res/ của bạn. Với mỗi loại tài nguyên, có một lớp con R (ví dụ, 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 tĩnh (ví dụ, R.drawable.icon). Số nguyên này là ID tài nguyên mà bạn có thể sử dụng để truy xuất tài nguyên của mình.

Mặc dù lớp R là nơi các ID tài nguyên được quy định, bạn sẽ không cần tìm ở đó để khám phá một ID tài nguyên. Một ID tài nguyên luôn bao gồm:

  • Loại tài nguyên: Mỗi tài nguyên được nhóm vào một "loại," chẳng hạn như string, drawable, và layout. Để biết thêm về các loại khác nhau, hãy xem phần Loại Tài nguyên.
  • Tên tài nguyên, là, hoặc: tên tệp, không bao gồm phần mở rộng; hoặc giá trị trong thuộc tính XML android:name, nếu tài nguyên đó là một giá trị đơn giản (chẳng hạn như một xâu).

Có hai cách để bạn có thể truy cập một tài nguyên:

  • Trong mã: Sử dụng một số nguyên tĩnh từ một lớp con của lớp R của bạn, chẳng hạn như:
    R.string.hello

    string là loại tài nguyên và hello là tên tài nguyên. Có nhiều API 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 Truy cập Tài nguyên trong Mã.

  • Trong XML: Sử dụng một cú pháp XML đặc biệt mà cũng tương ứng với ID tài nguyên được định nghĩa trong lớp R của bạn, chẳng hạn như:
    @string/hello

    string là loại tài nguyên và hello là tên tài nguyên. Bạn có thể sử dụng cú pháp nà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 Truy cập Tài nguyên từ XML.

Truy cập Tài nguyên trong Mã

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í dụ, bạn có thể đặt một ImageView để sử dụng tài nguyên res/drawable/myimage.png bằng cách sử dụng setImageResource():

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

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 Resources, theo đó bạn có thể nhận được một thực thể bằng getResources().

Cú pháp

Sau đây là cú pháp để tham chiếu một tài nguyên trong mã:

[<package_name>.]R.<resource_type>.<resource_name>
  • &lt;package_name&gt; là tên của gói mà tài nguyên nằm trong đó (không bắt buộc khi tham chiếu các tài nguyên từ gói của chính bạn).
  • &lt;resource_type&gt; là lớp con R cho loại tài nguyên.
  • &lt;resource_name&gt; hoặc là tên tệp tài nguyên không có phần mở rộng hoặc là giá trị thuộc tính android:name trong phần tử XML (đối với các giá trị đơn giản).

Xem phần Loại Tài nguyên để biết thêm thông tin về mỗi loại tài nguyên và cách tham chiếu chúng.

Trường hợp sử dụng

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 các phương pháp trong Resources. Bạn có thể lấy một thực thể Resources bằng Context.getResources().

Sau đây là một số ví dụ về truy cập tài nguyên trong mã:

// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

Chú ý: Bạn không nên sửa đổi tệp R.java bằng cách thủ công—nó được khởi tạo bởi công cụ aapt khi dự án của bạn được biên dịch. Mọi thay đổi đều bị ghi đè vào lần biên dịch tới của bạn.

Truy cập Tài nguyên từ XML

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 tham 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í, để cung cấp các xâu và hình ảnh cho widget của mình.

Ví dụ, nếu thêm một Button vào bố trí của mình, bạn nên sử dụng một tài nguyên xâu cho văn bản nút:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

Cú pháp

Sau đây là cú pháp để tham chiếu một tài nguyên trong một tài nguyên XML:

@[<package_name>:]<resource_type>/<resource_name>
  • &lt;package_name&gt; là tên của gói mà tài nguyên nằm trong đó (không bắt buộc khi tham chiếu các tài nguyên từ cùng gói đó)
  • &lt;resource_type&gt; là lớp con R cho loại tài nguyên.
  • &lt;resource_name&gt; hoặc là tên tệp tài nguyên không có phần mở rộng hoặc là giá trị thuộc tính android:name trong phần tử XML (đối với các giá trị đơn giản).

Xem phần Loại Tài nguyên để biết thêm thông tin về mỗi loại tài nguyên và cách tham chiếu chúng.

Trường hợp sử dụng

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ẽ cho 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í dụ, nếu bạn có tệp tài nguyên sau bao gồm một tài nguyên màu và một tài nguyên xâu:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

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à xâu văn bản:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

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 xuất phát từ gói của chính bạn. Để tham 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ụ:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />

Lưu ý: Bạn nên sử dụng các tài nguyên xâu và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. Để biết thông tin về việc tạo các tài nguyên thay thế (chẳng hạn như xâu được bản địa hóa), hãy xem phần Cung cấp Tài nguyên Thay thế. Để đượ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, hãy xem phần Bản địa hóa.

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ẽ là một bí danh cho một tài nguyên có thể vẽ khác:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />

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ề Tạo tài nguyên bí danh.

Tham chiếu các thuộc tính kiểu

Một tài nguyên thuộc tính kiểu sẽ cho phép bạn tham chiếu giá trị củ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 tù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 chủ đề 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 về 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."

Để 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 , nhưng thay vì biểu tượng @ (@), hãy sử dụng một dấu hỏi (?), và phần loại tài nguyên là tùy chọn. Ví dụ:

?[<package_name>:][<resource_type>/]<resource_name>

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 "chính" của chủ đề hệ thống:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

Ở đây, thuộc tính android:textColor quy định tên của một thuộc tính kiểu trong 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 android:textColorSecondary làm giá trị cho android:textColor trong widget này. Vì công cụ tài nguyên hệ 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, bạn không cần nêu rõ loại (mà sẽ là ?android:attr/textColorSecondary)—bạn có thể không nêu loại attr.

Truy cập Tài nguyên Nền tảng

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í. Để truy 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 android. Ví dụ, Android cung cấp một tài nguyên bố trí bạn có thể sử dụng cho các mục danh sách trong một ListAdapter:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

Trong ví dụ này, simple_list_item_1 là một tài nguyên bố trí được định nghĩa bởi nền tảng cho các mục trong một ListView. Bạn có thể sử dụng điều này thay vì tạo bố 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 Dạng xem Danh sách trong hướng dẫn cho nhà phát triển.