Resource trong Android



Có nhiều thứ bạn có thể sử dụng để xây dựng một ứng dụng Android tốt. Ngoài việc viết code cho ứng dụng, bạn cũng cần quan tâm đến các Resource khác, chẳng hạn nội dụng tĩnh mà code của bạn sử dụng như bitmap, color, layout, UI, … Những resource này là luôn luôn được duy trì riêng rẽ trong các thư mục con dưới thư mục res/ của project.

Chương này hướng dẫn cho bạn cách tổ chức các resource, xác định resource thay thế và truy cập chúng trong các ứng dụng của bạn.

Tổ chức Resource trong Eclipse

Bạn nên đặt mỗi kiểu resource trong một thư mục con cụ thể của thư mục res/. Ví dụ, ở đây là cấu trúc file cho một project đơn giản:

MyProject/
    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 resource trong các thư mục con đa dạng. Ở đây, chúng ta có một image resource, hai layout resource và một string resource. Bảng dưới đây cung cấp chi tiết về các thư mục nguồn được hỗ trợ bên trong thư mục res/

Tổ chức Resource trong Android Studio

MyProject/
    src/
	main/
	java/
	   MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 
				 
Thư mục Kiểu Resource
anim/ Các XML file định nghĩa thuộc tính hiệu ứng. Chúng được lưu giữ trong thư mục res/anim và được truy cập từ lớp R.anim .
color/ Các XML file định nghĩa danh sách trạng thái của màu. Chúng được lưu giữ trong res/color/ và được truy cập từ lớp R.color .
drawable/ Các Image file như .png, .jpg, .gif hoặc XML file mà được biên dịch vào trong bitmap, state list, shape, animation drawable. Chúng được lưu giữ trong res/drawable/ và được truy cập từ lớp R.drawable R.drawable .
layout/ XML files that define a user interface layout. They are saved in res/layout/ and accessed from the R.layout class.
menu/ XML file định nghĩa một UI layout. Chúng được lưu giữ trong res/layout/ và được truy cập từ lớp R.menu
raw/ Các file riêng để lưu giữ trong dạng raw from. Bạn cần gọi Resources.openRawResource() với resource ID, mà là R.raw.filename để mở các raw file này
values/ XML file chứa các giá trị đơn giản, ví dụ chuỗi, số nguyên và màu. Ví dụ, dưới đây là một số tên file qui ước cho các Resource bạn có thể tạo trong thư mục này: −
  • arrays.xml cho các mảng và được truy cập từ lớp R.array

  • integers.xml cho số nguyên và được truy cập từ lớp R.integer

  • bools.xml cho boolean, và được truy cập từ lớp R.bool class.

  • colors.xml cho các giá trị màu, và được truy cập từ lớp R.color

  • dimens.xml cho các giá trị chiều, và được truy cập từ lớp R.dimen

  • strings.xml cho các giá trị chuỗi, và được truy cập từ lớp R.string

  • styles.xml cho các style, và được truy cập từ lớp R.style

xml/ Các XML file riêng có thể được đọc tại runtime bởi gọi phương thức Resources.getXML(). Bạn có thể lưu giữ các file cấu hình đa dạng tại đây, các file này sẽ được sử dụng tại runtime

Resource để thay thế trong Android

Ứng dụng của bạn nên cung cấp các Resource thay thế để hỗ trợ cho các cấu hình thiết bị cụ thể. Ví dụ, bạn nên cung cấp các Drawable Resource thay thế (ví dụ image) cho các màn hình có độ phân giải khác nhau và String Resource thay thế cho các ngôn ngữ khác nhau. Tại runtime, Android dò cấu hình thiết bị hiện tại và tải Resource thích hợp cho ứng dụng của bạn.

Để xác định cấu hình thay thế cho một tập các Resource, bạn theo các bước: −

  • Tạo một thư mục mới trong res/ với tên dạng <resources_name>-<config_qualifier>. ở đây resources_name `sẽ là bất kỳ Resource đã đề cập trong bảng trên, như layout, drawable, … Qualifier sẽ xác định cấu hình riêng cho các Resource được sử dụng. Bạn có thể kiểm tra Offical Documentation để có danh sách đầy đủ các qualifier cho các kiểu Resource khác nhau.

  • Lưu Resource thay thế tương ứng trong thư mục mới này. Resource file phải được đặt tên chính xác như Resource file mặc định trong ví dụ dưới đây, nhưng các file này có nội dung cụ thể để Resource thay thế. Ví dụ, mặc dù tên image file sẽ là giống nhau, nhưng với màn hình có độ phân giải cao, thì độ phân giải của nó sẽ là cao.

Ví dụ dưới đây xác định các image cho một màn hình mặc định và image thay thế cho màn hình có độ phân giải cao.

MyProject/
   src/
	main/
	java/
	   MyActivity.java  
       res/
          drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 

Ví dụ khác xác định layout cho một ngôn ngữ mặc định và layout thay thế cho ngôn ngữ Arabic.

MyProject/
   src/
	main/
	java/
	   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 Resource trong Android

Trong suốt quá trình phát triển ứng dụng, bạn sẽ cần truy cập các Resource đã định nghĩa hoặc trong code của bạn hoặc trong XML layout file. Phần tiếp theo giải thích cách truy cập các Resource trong cả hai tình huống: −

Truy cập Resource trong code

Khi ứng dụng Android của bạn được biên dịch, một lớp R được tạo, chứa Resource ID cho tất cả các nguồn có sẵn trong thư mục res/. Bạn có thể sử dụng lớp R để truy cập các Resource đó bởi sử dụng thư mục phụ và tên Resource hoặc trực tiếp bằng Resource ID.

Ví dụ

Để truy cập res/drawable/myimage.png và thiết lập một ImageView, bạn sẽ sử dụng code sau:

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

Ở đây, dòng code đầu tiên sử dụng R.id.myimageview để lấy ImageView đã được định nghĩa với id là myimageview trong một layout file. Dòng thứ hai sử dụng R.drawable.myimage để lấy một image với tên myimage có sẵn trong thư mục phụ drawable dưới /res.

Ví dụ

Trong ví dụ này, res/values/strings.xml có định nghĩa sau:

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

Bây giờ, bạn có thể thiết lập text trên một đối tượng TextView với ID là msg bởi sử dụng một Resource ID như sau:

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

Ví dụ

Bạn theo dõi một layout là res/layout/activity_main.xml có định nghĩa sau:

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

Phần code này sẽ tải layout cho một Activity, trong phương thức onCreate(), như sau: −

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

Truy cập Resource trong XML

Bạn theo dõi res/values/strings.xml mà có một color resource và một string resource: −

<?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 Resource này trong layout file sau để thiết lập màu text và text string 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" />

Lúc này, nếu bạn quay trở lại chương trước trình bày về ví dụ Hello World!, tôi chắc rằng bạn sẽ hiểu sâu hơn các khái niệm được trình bày ở đây.

Loạt bài hướng dẫn học AngularJS cơ bản và nâng cao của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint.com

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.