String.xml trong Android
android
40
String.xml
1
Male avatar

Hades viết ngày 22/04/2017

Những điều cần nhớ

Hades 22-04-2017

Đừng dùng lại

Đừng sử dụng lại strings cho nhiều màn hình khác nhau.

1. Tưởng tượng rằng bạn có một hộp thoại loading trên 2 màn hình Sign in và Sign up. Vì cả 2 đều có chung một hộp thoại nên bạn quyết định sử dụng chung string - R.string.loading

<string name="loading">Loading please wait...</string>

2. Sau đó nếu bạn quyết định sử dụng một cái khác, bạn sẽ phải tạo ra hai string mới và chỉnh sửa code java. Nếu từ đầu bạn sử dụng 2 string, bạn sẽ sửa duy nhất file strings.xml.

<string name="sign_in_loading">Signing in...</string>
<string name="sign_in_loading">Signing up...</string>

3. Bạn không bao giờ biết ứng dụng của bạn hỗ trợ ngôn ngữ nào. Trong một ngôn ngữ - bạn sẽ có thể sử dụng một từ cho nhiều nội dung khác nhau, nhưng ở một ngôn ngữ khác - bạn sẽ phải sử dụng các từ khác nhau cho nội dung khác nhau.

<string name="download_file_yes">Yes</string>
<string name="terms_of_use_yes">Yes</string>
res/values/strings.xml
<string name="download_file_yes">Гаразд</string>
<string name="terms_of_use_yes">Так</string>
res/values-UA/strings.xml

Lưu ý rằng phiên bản tiếng Anh của strings.xml sử dụng cùng một từ – “yes” cho cả hai string R.string.download_file_yes và R.string.terms_of_use_yes.

Nhưng phiên bản tiếng Ukraina của strings.xml sử dụng hai từ khác nhau: “Гаразд” cho R.string.download_file_yes và “Так” cho R.string.terms_of_use_yes.

Riêng biệt

Các strings riêng biệt thuộc chung một màn hình nên được phân biệt bởi tiền tố và comment
<!-- settings screen start -->
<string name="settings_log_out">Log out</string>
<string name="settings_notification_policy">Notification Policy</string>
<string name="settings_contact_us">Contact Us</string>
<!-- settings screen end -->

<!-- profile screen start -->
<string name="profile_name">Name</string>
<string name="profile_email">Email</string>
<string name="profile_work">Work</string>
<string name="profile_birthday">Birthday</string>
<!-- profile screen end -->
  1. Thêm tên màn hình như là tiền tố vào mỗi string giúp ta ngay lập tức nhận ra màn hình mà string hiện tại thuộc về.
  2. Tệp strings.xml rõ ràng giúp dễ dàng duy trì và chuyển đổi nhiều strings sang các ngôn ngữ khác nhau - màn hình sau màn hình.

Định dạng

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

Không bao giờ nối chuỗi bằng toán tử + bởi vì trong các ngôn ngữ khác thứ tự từ có thể thay đổi.

<string name="login_welcome_back"> - welcome back</string>
res/values/strings.xml
String username =  "John Doe";
String result = username + " " + getString(R.string.login_welcome_back);
// EN result "John Doe - welcome back"

Cách đúng nên sử dụng Resources#getString(int id, Object… formatArgs).

<string name="login_welcome_back"> %s - welcome back</string>
res/values/strings.xml
<string name="login_welcome_back"> з поверненням %s</string>
res/values-UA/strings.xml

Khi đó :

String username = "John Doe";
String result = getString(R.string.login_welcome_back,username);
// EN result "John Doe - welcome back"
// UA result "з поверненням John Doe"

Số nhiều

Sử dụng Resources#getQuantityString (int id, int quantity) cho strings số lượng.
Không bao giờ giải quyết số nhiều trong code java , bởi vì các ngôn ngữ khác nhau có quy tắc khác nhau cho qui định về ngữ pháp với số lượng.

<plurals name="minutes">
        <item quantity="one">minute</item>
        <item quantity="other">minutes</item>
</plurals>
res/values/strings.xml
int minute = Calendar.getInstance().get(Calendar.MINUTE);
String text = getResource().getQuantityString(R.plurals.minutes,minutes);

Làm nổi bật một số từ

Sử dụng văn bản html để làm nổi bật những chữ cố định.

Nếu bạn muốn thay đổi màu sắc của một số từ trong TextView - ForegroundColorSpan không phải lúc nào cũng là sự lựa chọn tốt, bởi vì nếu nối bật thông qua các indexes, nó không an toàn trong các ứng dụng đa ngôn ngữ. Tốt hơn nên sử dụng Html font color tags bên trong file strings.xml.

Bạn có văn bản “Discover and play games.” Bạn muốn làm nổi bật từ “Discover” và “play” với màu xanh lam.

<string name="html_text" formatted="false">
    <![CDATA[
    <font color=\'#28b5f5\'>Discover</font> and <font color=\'#28b5f5\'>play</font> game.]]>
</string>
res/values/strings.xml
TextView textView = (TextView) findViewById(R.id.tv);
textView.setText(Html.fromHtml(getString(R.string.html_text)));

Nguồn

https://techtalk.vn/android-strings-xml-nhung-dieu-can-nho.html

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

Hades

5 bài viết.
16 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
9 12
Dưới đây là một cách tổ chức thư mục mà mình cho là khá hợp lý. Hi vọng mọi người có thể tham khảo và góp ý :smile: Android_structure ├─ com.abc ...
Hades viết 1 năm trước
9 12
Male avatar
4 0
Giới thiệu RecycleView là một viewGroup mới được giới thiệu trong Android L ( API 21 ). Đây là một viewGroup có chức năng tương tự như ListView nh...
Hades viết 1 năm trước
4 0
Male avatar
2 0
Vấn đề Khi làm việc với CSDL hay networks.. . có những thông số thường xuyên thay đổi như tên CSDL, cổng, tài khoản, người dùng, mật khẩu.. .Nếu n...
Hades viết 1 năm trước
2 0
Bài viết liên quan
White
8 4
Ở bài viết lần trước](), tôi đã nói về "hoàn cảnh" tại sao tôi lại cần sử dụng openssl trên android native, đồng thời cũng đã giới thiệu qua về các...
huydx viết gần 3 năm trước
8 4
White
6 0
Gradle là gì? Sao lại xử dụng Gradle trong Android? Sử dụng Gradle như thế nào? Đó là một trong rất nhiều câu hỏi mà các Android developer mới làm ...
khoatd92 viết 8 tháng trước
6 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
16 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!