2012-11-24 27 views
21

Tôi chỉ tự hỏi những gì các lợi ích/chi phí chung là dành cho sử dụng @string chứ không phải là chuỗi mã hóa cứng bên trong mã Java thực tế ... Ví dụ:chuỗi hardcode vs @string trong mã Java - Android

// To get the string resource: 
getActivity.setTitle(getString(R.string.my_string)); 

đây có phải là cách tốt để điều như tiêu đề Actionbar, Tự động tạo nút văn bản, vv ... Hoặc nên tôi chỉ làm điều này:

// Hardcoded string 
getActivity.setTitle("My String"); 

tôi biết sẽ có một overhead hơn chút làm nó theo cách đầu tiên .. Chỉ cần không chắc chắn thực hành tốt nhất là gì.

Trả lời

28

Trong trường hợp bạn không biết đến điểm thực tế của việc có hệ thống @string, vui lòng đọc qua tài liệu localization. Nó cho phép bạn dễ dàng xác định vị trí văn bản trong ứng dụng của bạn và sau đó nó được dịch.

Chỉnh sửa Xin cảm ơn Hippo đã xóa thông tin này.

Sử dụng nhiều chuỗi có cùng giá trị bất kể phương thức (Strings.xml vs programatically) dường như không có bất kỳ chi phí liên quan nào. Theo Oracle "Tất cả các chuỗi chữ và các biểu thức hằng số có giá trị chuỗi được tập trung" có nghĩa là đối tượng được tái sử dụng thay vì được tạo lại nếu bạn sử dụng lại nó.

+8

1 cho nội địa hoá. – PravinCG

+9

Chuỗi được thực tập, vì vậy tôi không nghĩ rằng nhận xét thứ hai của bạn sẽ được áp dụng. – AbdullahC

+1

@Hippo Đó là điểm tôi đang cố gắng thực hiện ở đó. Nếu String "Title" được tạo ra trong một lớp và trong năm lớp khác. Sử dụng Strings.xml sẽ tham chiếu đến một cá thể. Thay vì trong 5 lớp đó khởi tạo một đối tượng String mới. Điều đó có chính xác không? – KDEx

3

Bằng cách đó bạn có một nơi cố định để thay đổi tất cả các chuỗi của bạn trong dự án. Giả sử bạn đã sử dụng cùng một chuỗi ở 10 vị trí khác nhau trong mã. Nếu bạn quyết định thay đổi nó thì sao? Thay vì tìm kiếm nơi mà tất cả nó đã được sử dụng trong dự án bạn chỉ cần thay đổi nó một lần và thay đổi được phản ánh ở khắp mọi nơi trong dự án.

1

Vâng strings.xml sẽ phải được phân tích cú pháp, phải không? Sau đó, tôi cho rằng mã hóa cứng sẽ là tốt nhất cho hiệu suất, mặc dù có lẽ không đáng kể khi chạy. Mọi người chọn sử dụng nó mặc dù để có tất cả các chuỗi ở một chỗ trong trường hợp có kế hoạch dịch ứng dụng.

0

Có nhiều lợi ích khi đặt chuỗi trong tệp strings.xml; Tóm lại, nó cho phép bạn sử dụng cùng một chuỗi ở nhiều vị trí, đó là tốt nếu bạn bằng cách nào đó cần phải sửa đổi chuỗi sau này. Nó cũng cho phép bạn hiển thị cùng một văn bản bằng các ngôn ngữ khác nhau; hardcoding chuỗi không cung cấp cho bạn tất cả các tùy chọn đó.
BTW, bạn không cần phải đặt mọi văn bản trong tệp chuỗi.XML; chỉ những cái có thể được sử dụng ở nhiều nơi trong ứng dụng.
Quy tắc chung để đặt các chuỗi trong tệp strings.xml là:

  • Nó sẽ được sử dụng ở nhiều địa điểm?
  • Nó có được sử dụng trong nhiều ngôn ngữ không?
  • Nó sẽ là động hay tĩnh?

Tôi chắc chắn có nhiều lý do khác, nhưng đây là những lý do tôi biết.

Hy vọng điều này sẽ hữu ích.

9

Thực hành không tốt đối với các chuỗi mã cứng vào tệp/mã bố cục của bạn. Bạn nên thêm chúng vào tệp tài nguyên chuỗi và sau đó tham chiếu chúng từ bố cục của bạn.

Lý do:

  • này cho phép bạn cập nhật mỗi lần xuất hiện của từ tương tự trong tất cả các bố trí cùng một lúc bằng cách chỉ cần chỉnh sửa tập tin strings.xml của bạn.
  • Cũng rất hữu ích khi hỗ trợ nhiều ngôn ngữ dưới dạng tệp strings.xml riêng biệt có thể được sử dụng cho từng ngôn ngữ được hỗ trợ.

Khi documentation nói:

Giả sử rằng ngôn ngữ mặc định của ứng dụng của bạn là tiếng Anh. Giả sử cũng là bạn muốn bản địa hóa tất cả văn bản trong ứng dụng của mình thành tiếng Pháp và hầu hết văn bản trong ứng dụng của bạn (mọi thứ ngoại trừ tiêu đề của ứng dụng) cho tiếng Nhật. Trong trường hợp này, bạn có thể tạo ba file strings.xml thay thế, từng được lưu trữ trong một thư mục tài nguyên bản địa đặc thù

Tôi nghĩ rằng những lý do là đủ để khuyên bạn nên đi cho @String