[Tự học lập trình Android] Bài 5: Tổ chức tài nguyên & Truy cập tài nguyên trong ứng dụng Android

Tổ chức tài nguyên & Truy cập tài nguyên trong ứng dụng Android  

Có nhiều item mà bạn sử dụng để xây dựng một ứng dụng Android. Ngoài việc coding cho các ứng dụng, bạn phải quan tâm đến các resources khác như nội dung  chương trình của bạn sử dụng, chẳng hạn như ảnh, màu sắc, bố trí các định nghĩa, giao diện người dùng, .... Những tài nguyên này luôn được duy trì một cách riêng biệt trong nhiều thư mục con dưới res/ thư mục của dự án.

 
Hướng dẫn này sẽ giải thích cho bạn làm thế nào bạn có thể tổ chức tài nguyên ứng dụng của bạn, xác định các nguồn tài nguyên thay thế và truy cập chúng trong các ứng dụng của bạn.
 Tổ chức Tài nguyên  (Organize Resources)

Bạn nên đặt từng loại tài nguyên trong một thư mục con cụ thể của res / thư mục của dự án của bạn. Ví dụ, đây là hệ thống phân cấp tập tin cho một dự án đơn giản:
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 
Res / thư mục chứa tất cả các tài nguyên trong các thư mục con khác nhau. Ở đây chúng ta một nguồn tài nguyên hình ảnh (drawable), giao diện (layout), một tập tin chứa chuối (string). Bảng dưới đây đưa ra một chi tiết về các thư mục nguồn hỗ trợ trong dự án res / thư mục.
Thư mụcKiểu tài nguyên
anim/Các tập tin XML định nghĩa thuộc tính hình ảnh động . Chúng được lưu trong res/anim/ thư mục và truy cập từ lớp R.anim
color/Các tập tin XML định nghĩa các màu sắc sử dụng trong ứng dụng. Chúng được lưu trong  res/color/ và truy cập từ lớp R.color.
drawable/Tập tin hình ảnh có đinh giạng .png, .jpg, .gif hoặc các tập tin XML được dịch thành bitmaps, danh sách trạng thái, hình, ảnh động. Chúng được lưu trong  res/drawable/ và truy cập từ lớp R.drawable.
layout/Các tập tin XML định nghĩa các lớp giao diện. Chúng được lưu trong res/layout/ và được truy cập từ lớp R.layout.
menu/Các tập tin XML định nghĩa các ứng dụng menu, giống như Options Menu, Context Menu, hoặc Sub Menu. Chúng được lưu trong  res/menu/ và được truy cập từ lớp R.menu.
raw/Tập tin bất ký lưu dưới dạng thô. Ban cần gọi phương thức Resources.openRawResource() với tài nguyên ID, đó là R.raw.filename để mở file nguyên gốc như vậy.
values/Tập tin XML chứa các giá trị đơn giản, chẳng hạn như chuỗi, số nguyên, và màu sắc. Ví dụ, đây là một số quy ước tên tập tin cho các nguồn lực bạn có thể tạo ra trong thư mục này:
  • arrays.xml cho tài nguyên mảng, và truy cập từ lớp R.array.
  • integers.xml cho tài nguyên số nguyên, và truy cập từ lớp R.integer.
  • bools.xml cho tài nguyên logic, và truy cập từ lớp R.bool.
  • colors.xml cho giá trị màu, và truy cập từ lớp R.color.
  • dimens.xml cho các giá trị kích thước, và được truy cập từ lớp R.dimen.
  • strings.xml cho giá trị string, và được truy cập từ lớp R.string .
  • styles.xml cho styles, và truye cập từ lớp R.style.
xml/Các tập tin XML tùy ý có thể được đọc tại thời gian chạy bằng cách gọi Resources.getXML().
Bạn có thể lưu các tập tin cấu hình khác nhau ở đây mà sẽ được sử dụng tại thời gian chạy.

Tài nguyên khác (Alternative Resources)

Ứng dụng của bạn nên cung cấp nguồn tài nguyên thay thế để hỗ trợ cấu hình thiết bị cụ thể. Ví dụ, bạn nên bao gồm tài nguyên drawable thay thế (ie.images) cho độ phân giải màn hình khác nhau các nguồn tài nguyên chuỗi thay thế cho các ngôn ngữ khác nhau. Khi chạy, Android phát hiện các cấu hình thiết bị hiện tại và tải các nguồn lực thích hợp cho ứng dụng của bạn.
Để xác định lựa chọn thay thế cấu hình cụ thể cho một tập hợp các nguồn, thực hiện theo các bước sau:
  • Tạo thư mục mới trong res/ tên thư mục có dạng <resources_name>-<config_qualifier>. Ở đây resources_name sẽ là một trong các nguồn nêu ở bảng trên, như layout, drawable etc. qualifier sẽ chỉ định một cấu hình cá nhân các nguồn sẽ được sử dụng. Bạn có thể kiểm tra tài liệu chính thức cho một danh sách đầy đủ của vòng loại cho loại khác nhau của các nguồn tài nguyên.
  • Lưu các nguồn tài nguyên thay thế tương ứng trong thư mục mới này. Các tập tin tài nguyên phải được đặt tên chính xác giống như các tập tin tài nguyên mặc định như trong ví dụ dưới đây, nhưng những tập tin này sẽ có nội dung cụ thể để thay thế. Ví dụ mặc dù tên tập tin hình ảnh sẽ tương tự nhưng cho màn hình độ phân giải cao, độ phân giải của nó sẽ cao.
Dưới đây là một ví dụ trong đó xác định hình ảnh cho một màn hình mặc định và hình ảnh thay thế cho màn hình độ phân giải cao.
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 
Dưới đây là một ví dụ khác mà xác định bố trí cho một ngôn ngữ mặc định và bố trí thay thế cho ngôn ngữ Ả Rập.
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        layout-ar/
            main.xml
        values/  
            strings.xml 

Truy cập vào tài nguyên

Trong phát triển ứng dụng của bạn, bạn sẽ cần phải truy cập tài nguyên được xác định hoặc trong mã của bạn, hoặc trong các tập tin XML giao diện của bạn. Phần dưới đây giải thích làm thế nào để truy cập tài nguyên của bạn trong cả hai kịch bản:
TRUY CẬP TÀI NGUYÊN TRÊN MÃ (CODE)

Khi ứng dụng Android của bạn được biên dịch, một lớp R được tạo ra, trong đó có ID tài nguyên cho tất cả các nguồn sẵn có trong thư mục res/. Bạn có thể sử dụng lớp R để truy cập vào tài nguyên sử dụng thư mục và tài nguyên tên hoặc trực tiếp tài nguyên ID.
Ví dụ:
Truy cập res/drawable/myimage.png và thiết lập ImageView bạn sẽ sử dụng code:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
Ở dòng đầu tiên bạn tìm tìm đến nguồn R.id.myimageview để tạo ImageView với định danh idmyimageview  trong tập tin Layout. Dòng thứ 2 khai báo R.drawable.myimage để tạo một ảnh có tên myimage trong thư mục con /res.

Ví dụ:
Xem xét ví dụ tiếp theo, tại res/values/strings.xml định nghĩa sau đây:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>
Bây giờ bạn tạo ra đối tượng TextView với ID msg sử dụng  ID dưới đây:
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

Ví dụ:
Xem xét mộtlayout res/layout/activity_main.xml  với định ng:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" >
<TextView android:id="@+id/text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello, I am a Button" />
</LinearLayout>
Code ứng dụng này sẽ load một layout  Activity, trong phương thức onCreate():
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

TRUY CẬP NGUỒN TRÊN XML

Xem xét các tập tin XML nguồn
res/values/strings.xml bao gồm màu sắc và chuỗi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>
Bây giờ bạn có thể sử dụng các nguồn tài nguyên trong các tập tin bố trí sau đây để thiết lập màu sắc văn bản và chuỗi văn bản như sau:
<?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" /> 

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

-----------------------------------------
Xem thêm bài và ví dụ khác: