Nội dung
1. Tổng quan về tài nguyên trong Android
Bất kỳ ứng dụng mà bạn phát triển sẽ phải bao gồm một số loại tài nguyên và các giá trị cục bộ, chẳng hạn như chuỗi, hình ảnh (thậm chí đơn giản là biểu tượng ứng dụng) và màu sắc. Trong hướng dẫn này, bạn sẽ tìm hiểu về các tài nguyên trong Android và làm thế nào để sử dụng chúng trong ứng dụng của bạn để hiển thị nội dung cho người dùng, xử lý các thiết bị có kích thước khác nhau và hỗ trợ người dùng thông qua các ngôn ngữ khác nhau.
1.1 thêm tài nguyên vào các dự án
Khi bạn tạo ra một dự án trong Android Studio, bạn được cung cấp hai thư mục chính trong dự án của bạn chứa các tập tin mã nguồn, java và res. Ở đây res là viết tắt của resources (tài nguyên), và như tên gọi của nó, nó bao gồm các tài nguyên cho dự án. Trong ngữ cảnh của Android, một nguồn tài nguyên là một tập tin đại diện cho một cái gì đó có thể được vẽ ra trên màn hình, một tập tin layout cho các lớp của bạn, hoặc một giá trị có thể được truy cập trong ứng dụng của bạn, chẳng hạn như một giá trị chuỗi hoặc màu hex. Trong phần này, bạn sẽ tìm hiểu về các loại tài nguyên có sẵn đối với ứng dụng của bạn.
1.2 các kiểu tài nguyên
Để sử dụng tài nguyên trong một dự án Android, bạn cần phải sắp xếp chúng vào các thư mục con trong thư mục res. Cấu trúc thư mục của tài nguyên của một dự án Android tiêu chuẩn có thể trông giống như thế này:
Có một số giới hạn các tên thư mục được hỗ trợ bởi hệ thống tài nguyên Android và hiểu biết về chúng là điều cần thiết khi bạn tiếp tục phát triển các ứng dụng Android. Hãy cùng tìm hiểu chúng chi tiết hơn.
- animator: Thư mục tài nguyên animator có thể chứa các tập tin XML định nghĩa hiệu ứng động cho các đối tượng View trong ứng dụng của bạn. Thay vì định nghĩa hiệu ứng động lặp đi lặp lại trong code Java của bạn, thì bạn có thể nhập một tập tin XML animator ở mọi nơi mà bạn cần phải sử dụng một hiệu ứng động cụ thể. Nếu bạn quyết định thay đổi hiệu ứng động sau này, thì bạn có thể thay đổi nó ở một nơi trong ứng dụng của bạn chứ không phải là nhiều nơi.
- color: Dù bạn có thể lưu các giá trị màu hex trong thư mục values, nhưng thư mục color được sử dụng để lưu trữ các tập tin XML mà tương quan với thông tin trạng thái với các màu sắc cụ thể. Điều này là hữu ích nếu bạn cần thay đổi màu sắc văn bản của một View hoặc nền khi chạm vào để cung cấp phản hồi cho người dùng.
- drawable: Nếu ứng dụng đòi hỏi tài nguyên hình ảnh cục bộ, chẳng hạn như JPGs và PNGs, thì bạn cần phải đặt chúng trong thư mục drawable. Đây cũng là nơi bạn chứa tập tin XML xác định hình dạng và vector hoặc hình ảnh được vẽ ra trong code.
- mipmap: Tương tự như drawable, thư mục mipmap chấp nhận các hình ảnh bitmap, nhưng nó được sử dụng đặc biệt cho các biểu tượng launcher của ứng dụng. Điều này là cần thiết vì Android sử dụng các hình ảnh một kích thước lớn hơn so với những gì các thiết bị thường sử dụng cho các biểu tượng launcher.
- layout: Thư mục layout chứa các tập tin XML xác định giao diện người dùng ứng dụng của bạn.
- menu: Các tập tin menu XML được sử dụng để xác định action bar và menu điều hướng và menu con. Các nguồn tài nguyên này được đặt trong thư mục tài nguyên menu.
- raw: Thư mục raw được sử dụng để lưu trữ các tập tin raw tùy ý cho ứng dụng của bạn, chẳng hạn như âm thanh, video và các tập tin văn bản. Điều này cung cấp một cách dễ dàng để truy cập các tập tin, mặc dù nếu bạn cần truy cập vào tên gốc của tập tin hoặc phân cấp thư mục, bạn nên xem xét việc đặt các tập tin raw trong thư mục asset của Android.
- xml: Thư mục này chứa các tập tin XML tùy ý được sử dụng bởi Android cho các tác vụ khác nhau, chẳng hạn như việc xác định cấu hình tìm kiếm hoặc khả năng bên ngoài, chẳng hạn như việc sử dụng Android Auto.
1.3 values
Trong khi danh sách của các thư mục nguồn tài nguyên có sẵn ở trên là khá dài, có thêm một thư mục mà bạn sẽ sử dụng thường xuyên khi là một nhà phát triển Android và đó là thư mục values. Thư mục values có thể chứa nhiều tập tin XML bao gồm các giá trị đơn giản được sử dụng bên trong các ứng dụng của bạn, bao gồm:
- arrays: Các đối tượng mảng đơn giản có thể được đọc trong ứng dụng của bạn.
- colors: Đặt tên giá trị hex của màu sắc có thể được sử dụng ở nhiều nơi trong ứng dụng của bạn.
- dimens: Các kích thước có thể định nghĩa bất cứ điều gì liên quan đến kích thước trong Android, bao gồm cả văn bản và padding.
- integers: Nếu có các số nguyên cụ thể mà bạn cần sử dụng trong ứng dụng của bạn, bạn có thể lưu trữ chúng trong tập tin tài nguyên integers do đó chúng có thể dễ dàng tìm và thay đổi sau này trong quá trình phát triển của bạn.
- strings: Chuỗi là một điều cần thiết trong bất kỳ ứng dụng Android nào mà bạn xây dựng. Thay vì phân phát chúng trong code của bạn, bạn có thể giữ các chuỗi trong tập tin giá trị strings.xml.
- plurals: Tương tự chuỗi, plurals cho phép bạn cung cấp sự thay thế chuỗi khi một con số được truyền vào một hàm. Điều này xử lý các tình huống nơi mà một phép lượng hoá chuỗi sẽ thay đổi dựa trên số lượng các phần mà nó đại diện.
- styles: Bất kỳ ứng dụng mà bạn xây dựng cần một giao diện nhất quán và điều này có thể đạt được bằng cách sử dụng tập tin styles.xml Sử dụng styles, bạn có thể thay thế giao diện mặc định cho các thành phần và các thuộc tính có thể được liên kết với các đối tượng View khác nhau trong các tập tin layout.
Như bạn có thể thấy, framework tài nguyên trong Android là rất rộng. Khi bạn tiếp tục phát triển ứng dụng, bạn sẽ thấy nhiều hơn nữa việc sử dụng các tập tin tài nguyên và các giá trị để làm cho việc phát triển và duy trì các ứng dụng của bạn nhanh hơn và dễ dàng hơn.
2. Truy cập vào tài nguyên
Bây giờ thì bạn đã biết cách làm thế nào để thêm tài nguyên vào ứng dụng của bạn, bạn cần thêm khả năng truy cập chúng. Tất cả các tài nguyên được lưu trữ trong ứng dụng của bạn được tự động gán một tên có thể xác định gồm loại tài nguyên, chẳng hạn như drawable hay layout và id trong tập tin R của ứng dụng. Tập tin R là một tập tin được tạo ra bởi công cụ Android Asset Packaging, hoặc aapt, trong quá trình biên dịch. Tên được tạo ra này có thể được sử dụng để truy cập vào các nguồn tài nguyên trong code Java của bạn hoặc một tập tin tài nguyên XML.
3. Truy cập tài nguyên trong Java
Nhiều đối tượng trong Android được xây dựng với các định danh của nguồn tài nguyên và chấp nhận id đối với một nguồn tài nguyên để sử dụng tài nguyên đó. Một ví dụ của điều này là thiết lập một ImageView để sử dụng một tài nguyên drawable bằng cách truyền vào trong id của drawable R.
mImageView.setImageResource(R.drawable.test);
Tương tự, một đối tượng MediaPlayer (được sử dụng để phát âm thanh hoặc video) có thể được tạo ra để chơi tập tin đa phương tiện raw bằng cách truyền vào trong R id của tập tin.
MediaPlayer.create(getActivity(), R.raw.sample_media)
Mặc dù một số lượng lớn các đối tượng chấp nhận một id tài nguyên, cũng có khi bạn muốn truy xuất tài nguyên gốc trong code của bạn. Bạn có thể làm điều này bằng cách sử dụng phương thức getResources() có sẵn trong đối tượng Context của Android. Điều này trả về một đối tượng Resources với nhiều phương thức để truy cập vào các tài nguyên cục bộ của ứng dụng, chẳng hạn như getColor() và getDrawable().
getResources().getColor(R.color.colorPrimary);
getResources().getDrawable(R.drawable.kittens);
4. Truy cập tài nguyên trong XML
Phần lớn thời gian khi bạn sử dụng tài nguyên, nó sẽ ở trong các tập tin XML. Bằng cách định nghĩa màu sắc, phong cách, văn bản, hoặc bất kỳ tài nguyên nào được sử dụng ở nhiều nơi khác nhau của ứng dụng của bạn, nó làm cho việc bảo trì trở nên đơn giản hơn bằng cách cho phép bạn thay đổi một giá trị và có tác dụng trên toàn bộ ứng dụng của bạn. May mắn là bạn có thể truy cập tài nguyên trong một thuộc tính XML bằng cách truyền id vào một trường mà cần một id tài nguyên.
<TextView
android:id="@+id/tv_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:text="@string/title"
style="@style/TitleStyle"/>
5. Cung cấp các nguồn tài nguyên khác
Hầu hết các ứng dụng mà bạn xây dựng sẽ xử lý các thiết bị có kích thước, cấu hình và sử dụng ngôn ngữ khác nhau. Bằng cách gắn thêm phân loại loại cụ thể vào cuối của thư mục tài nguyên, hệ thống Android ưu tiên các nguồn tài nguyên đó, khi một số điều kiện được đáp ứng.
6. Độ phân giải màn hình
Để tránh hình ảnh bị rổ, các tập tin bitmap mà bạn tạo ra cho các ứng dụng của bạn nên được tạo ra cho những mật độ điểm ảnh cụ thể. Bằng cách gắn thêm -ldpi, -mdpi, -hdpi, và các phân loại khác vào các thư mục, như đối với mipmaps trong hình ở phần đầu bài viết này, hệ thống Android biết tài nguyên nào để sử dụng cho bất kỳ thiết bị cụ thể nào chạy ứng dụng của bạn.
7. Ngôn ngữ của người dùng
Bạn có thể tạo ra các thư mục values riêng cho mỗi ngôn ngữ mà ứng dụng của bạn hỗ trợ bằng cách gắn thêm một mã ngôn ngữ vào cuối của tên thư mục, chẳng hạn như values-fr hoặc values-es cho tiếng Pháp và tiếng Tây Ban Nha.
Khi một người dùng có ngôn ngữ của họ được thiết lập thành một trong những ngôn ngữ này, hệ thống sẽ cung cấp bất kỳ giá trị nào trong thư mục tài nguyên mới cho người dùng, chứ không phải là các giá trị mặc định. Điều này là hữu ích cho việc thay thế tài nguyên chuỗi với các bản dịch thích hợp.
8. Hỗ trợ máy tính bảng và xoay màn hình
Bạn có thể gắn thêm -land vào một thư mục tài nguyên để có những giá trị thay thế mặc định khi một thiết bị ở chế độ nằm ngang. Bạn cũng có thể định nghĩa một chiều rộng tối thiểu của một thiết bị cho một thư mục tài nguyên để thay thế mặc định để hỗ trợ cho máy tính bảng bằng cách gắn thêm -sw600dp cho máy tính bảng kích thước vừa (chẳng hạn như Nexus 7) và -sw720dp cho máy tính bảng lớn hơn.
Tổng kết :
Bất kỳ ứng dụng nào mà bạn xây dựng sẽ bao gồm các nguồn tài nguyên và nắm rõ cách để truy cập vào và hỗ trợ nhiều cấu hình thiết bị khác nhau là một phần quan trọng của việc trở thành một nhà phát triển Android. Trong bài viết này, bạn đã học được các nguồn tài nguyên có thể được bao gồm trong một ứng dụng, làm thế nào để truy cập chúng trong Java, XML, và làm thế nào để thay thế các nguồn tài nguyên trong các tình huống cụ thể.