12/08/2018, 14:17

Android strings.xml — Những điều cần phải nhớ

strings.xml hẳn là điều khá cơ bản và tầm thường trong một ứng dụng Android, nhưng làm sao để sử dụng nó tối ưu và làm chủ nó thì chưa hẳn ai cũng biết. Hãy cùng theo dõi những quy tắc dưới đây để làm việc tốt hơn với strings.xml nhé I. Hạn chế tái sử dụng Không sử dụng cùng một strings cho ...

strings.xml hẳn là điều khá cơ bản và tầm thường trong một ứng dụng Android, nhưng làm sao để sử dụng nó tối ưu và làm chủ nó thì chưa hẳn ai cũng biết. Hãy cùng theo dõi những quy tắc dưới đây để làm việc tốt hơn với strings.xml nhé

I. Hạn chế tái sử dụng

Không sử dụng cùng một strings cho các màn hình khác nhau

  1. Thử tưởng tượng bạn có một hộp thoại hiển thị trạng thái đang tải dữ liệu trên màn hình Sign In và Sign Up. Bạn quyết định sử dụng chung một string là R.string.loading

1-JS87DDYrThImLteYAXtFhQ.pngdfasdf

Sau đó bạn lại muộn thay đổi string hiển thị này cho một trong 2 màn hình kia, lúc này bạn sẽ phải tạo ra 2 strings mới và chỉnh sửa lại trong java code. Nếu bạn tạo ngay 2 string từ ban đầu thì bạn chỉ phải việc sửa trong duy nhất file strings.xml mà không cần động đến java code

1-36F3gYBBrh0Df8BjfSUW-g.png

  1. Bạn có thể không biết trước được ứng dụng của mình hỗ trợ những ngôn ngữ nào. Trong một ngôn ngữ bạn có thể dùng cùng một từ tại các ngữ cảnh khác nhau, nhưng với một ngôn ngữ khác bạn phải dùng một từ khác

1-gyimVk1AvhWWQ6LF4vxL7A.png

1-hG4uYDhTEIHOyVeU0lRqXw.png

II. Tách, phân chia

Chia strings riêng biệt ra theo màn hình bằng cách để tiền tố tên và ghi chú

1-i24UBT-ET2iv6Q9UUakC1Q.png

  1. Thêm tiền tố vào tên của mối string giúp ta phát hiện ra ngay lập tức string này thuộc về màn hình nào
  2. Định nghĩa rõ ràng strings.xml giúp dễ dàng bảo trì và dịch sang ngôn ngữ khác

Chia nhỏ strings.xml cho mỗi màn hình

Nếu bạn muốn tạo file strings.xml cho mỗi màn hình -setting-strings.xml, profile-string.xml... Nhưng một ứng dụng thường xuyên có từ 10 đến 20 màn hình thì việc bạn phải thêm 10-20 file strings.xml cho mỗi thư mục ngôn ngữ thì nó sinh ra khá nhiều nội dung

III. Định dạng

Sử dụng Resources#getString(int id, Object… formatArgs) để định dạng dữ strings

Đừng bao giờ sử dụng "+" để nối strings, bởi vì trong một vài ngôn ngữ thứ tự của các từ có thể khác nhau

1-CY9aQc_Zg8q0Q17_y20MyA.png

1-CMnyPXvHDND8RAFBfceSMQ.png

Sử dụng cách với Resources#getString(int id, Object… formatArgs).

1-YFqXBcP_XDswNZwFeXmYOw.png

1-YFqXBcP_XDswNZwFeXmYOw.png

1-YFqXBcP_XDswNZwFeXmYOw.png

IV. Số nhiều

Sử dung Resources#getQuantityString (int id, int quantity) để làm việc với string có liên quan đến số nhiều

Dừng bao giờ giải quyết việc hiển thị số nhiều trong java code, bởi vì sự khác nhau về ngôn ngữ sẽ tạo ra sự khác biệt về các luật trong ngữ pháp hiển thị số lượng

Dưới đây là cách ta thường làm 1-4NH4qsPMMSQ70QV8zvOH-A.png

1-WxoCPGta9uGTIoxfmXg3pA.png

Cách làm đúng với Resources#getQuantityString (int id, int quantity)

1-_KVd1Fhu4xUIy9cAdL7Acw.png

1-jaGAm1mVsrKUCYH0LBN-_A.png

V. Làm nổi bật các từ

Sử dụng html để làm nổi bật từ

Nếu bạn muốn thay đổi màu của một vài từ trong TextView- ForegroundColorSpan không phải là sự lựa chọn tốt nhất, bởi vì việc làm nổi bật từ thực hiện qua chỉ số của từ và nó không an toàn khi làm việc với đa ngôn ngữ.Thay vào đó ta nên sử dụng html với thẻ <font> bên trong file strings.xml của bạn

Thử tượng tượng bạn có từ " “Discover and play games.” và bạn muốn làm nổi bật từ “Discover” và "play" với màu xanh

1--v6s0KtpNaszxun2wITpoQ (1).png

1-jWwEWf0E9GFE6_hos9zWzw.png

Nguồn: google-developer-experts

0