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: −
|
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.
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.
Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack
Follow 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.
Bài học Angular phổ biến tại vietjack.com: