Lập trình Android - Android Resources

Thiết lập và truy xuất Android Resources

Có rất nhiều thứ bạn cần phải sử dụng để có thể tạo ra được một ứng dụng tốt. Ngoài việc viết mã (code) cho ứng dụng, bạn cần phải quan tâm đến các resource giống như là nội dung tĩnh mà code sử dụng. Chẳng hạn như bipmaps, colors, layout, strings,… Các resource này được chứa trong các thư mục con khác nhau và thuộc thư mục src/.

Trong phần này sẽ giới thiệu bạn cách thiết lập các resources, xác định rõ các resources và cách truy xuất chúng trong ứng dụng của bạn.

1. Thiết lập resource

Bạn nên để mỗi kiểu resource và mỗi thư mục con khác nhau và cùng nằm trong thư mục res/. 

Ví dụ

  src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 

Thư mục res/ chứa tất cả các thư mục con. Trong ví dụ trên chúng ta có 1 image resource, 2 layout resource, và 1 string resource.

Sau đây là chi tiết các thư mục resources được hỗ trợ bên trong thư mục res/.

  • anim/: Chứa các file xml định nghĩa các hiệu ứng. Chúng được truy xuất từ class R.anim.
  • color/: Là các file xml định nghĩa về màu sắc. Chúng được truy xuất từ class R.color.
  • drawable/: Chứa các file hình ảnh .png.jpg.gif hoặc các file xml đã được biên dịch thành bitmaps. Chúng được truy xuất từ class R.drawable.
  • layout/: Chứa các file xml định nghĩa giao diện người dùng. Chúng được truy xuất từ class R.layout.
  • menu/: Chứa các file xml định nghĩa menu của ứng dung, có thể là Options Menu, Context Menu, Sub Menu. Chúng được truy xuất từ class R.menu.
  • raw/: Chứa các file bất kỳ, tùy ý. Cần phải gọi Resources.openRawResource(). Với resource ID, nó là R.raw.filename để mở 1 file raw.
  • values/: Chứa các file xml để lưu các giá trị đơn giản như string, integers, colors,…

              + arrays.xml: Dùng để định nghĩa các mảng dữ liệu, và được truy xuất từ class R.array.
              + integers.xml: Dùng để định nghĩa các số integer và được truy xuất từ class R.integer.
              + bools.xml: Dùng để định nghĩa kiểu dữ liệu bool và được truy xuất từ class R.bool.
              + colors.xml: Dùng để định nghĩa các giá tri color và được truy xuất từ class R.color.
              + dimens.xml: Dùng để định nghĩa các giá trị về kích thước, chiều. Được truy xuất từ class R.dimen.
              + strings.xml: Dùng để định nghĩa các string và được gọi từ class R.string.

  • styles.xml: Dùng để định nghĩa các styles và được gọi từ class R.style.
  • xml/: Chứa các file xml bất kỳ và có thể được đọc bằng cách gọi hàm Resources.getXML(). Bạn có thể lưu các file XML cấu hình ở đây và nó sẽ được dùng khi ứng dụng chạy.

2. Các resources thay thế

Ứng dụng của bạn nên hỗ trợ các resources thay thế để có thể hỗ trợ tốt hơn trên các thiết bị khác nhau.
VD: Bạn nên các các drawable resources thay thế khác nhau như là hình ảnh để hỗ trợ các các thiết bị có độ phân giải màn hình khác nhau.
Hoặc các strings resources thay thế khác nhau để hỗ trợ nhiều ngôn ngữ.
Vào lúc chương trình chạy Android sẽ phát hiện ra các thiết lập dành cho cấu hình của thiết bị và load các resources thích hợp.
Các bước để xác định các cấu hình cho các resources lựa chọn thay thế:
Tạo thư mục mới trong thư mục res/ theo hình thức <resources_name>-<config_qualifier><resources_name> có thể là tên của thư mục con bất kỳ như đã đề cập ở phần trên (như là color/layout/). <qualifier> sẽ chỉ định một cấu hình riêng biệt mà các resources sẽ sử dụng.
Lưu các resources thay thế vào các thư mục mới được tạo. Các file resources này phải được đặt tên giống như các file resources mặc định.
VD: Dưới đây và ví dụ về các image resource mặc định dùng cho thiết bị có độ phân giải màn hình thấp, và các image resources thay thế dành cho các thiết bị có độ phân giải màn hình 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 

3. Truy xuất các resources.

Trong khi phát triển ứng dụng bạn cần phải truy xuất các file resources trong hoặc trong code của bạn, hoặc trong các file XML. Sau đây là hướng dẫn về cách xuất các file resources

a. Truy xuất resources trong code

Khi ứng dụng Android của bạn bạn được biên dịch. một class được sinh ra, nó chứa các resource ID cho tất cả các resources nằm trong thư mục res/. Bạn có thể sử dụng class để truy cập vào resources sử dụng tên thư mục con và tên resource hoặc sử dụng trực tiếp các resource ID.

Ví dụ: Truy xuất  res/drawable/myImage.png

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

Dòng đầu tiên sử dụng R.id.myimageview để có được ImageView được định nghĩa với IDmyimageview trong Layout file. Dòng thứ 2 sử dụng R.drawable.myimage để lấy ảnh với tên là myimage trong thư mục res/drawable/.

Ví dụ: Truy xuất res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>

Để sử dụng string: ‘hello

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

Ví dụ: Truy xuất res/layout/activity_main.xml

<?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 của bạn sẽ load activity_main.xml trong phương thức onCreate() như sau:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

b. Truy xuất resources trong XML

Ví dụ: Truy xuất res/values/strings.xml

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

Sau đó bạn sẽ sử dụng các giá trị string và color trong file strings.xml để xét các giá trị cho layout.

<?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" />