2011-07-13 32 views
6

Trong ứng dụng Android của tôi, tôi có một tệp xml tài nguyên chuỗi lớn. Tôi muốn tham khảo và sử dụng lại các giá trị tài nguyên được khai báo trong các giá trị String. Có thể có lớp R giải quyết các giá trị tham chiếu (a la @ string/db_table_name) không?Có thể thực hiện thay thế chuỗi trong tệp XML tài nguyên Android trực tiếp không?

<resources> 
<string name="db_table_name">tbl_name</string> 
<string name="ddl">create table @string/tbl_name</string> 
</resources> 

Có cách nào để thực hiện việc này không. Trong thế giới Java thông thường, một số công cụ sử dụng biểu thức $ {varname} để giải quyết tham chiếu. Điều này có thể được thực hiện ở tất cả trong Android?

+1

bạn có lẽ không cần tên công cụ tạo truy vấn db của bạn và các công cụ tạo truy vấn trong tài nguyên xml và chúng sẽ không phụ thuộc vào nội địa hóa hoặc vòng loại thiết bị - tôi sẽ bỏ phiếu cho h aving công cụ này trong một tập tin cấu hình dự án toàn cầu và có thể là một lớp tĩnh để tạo truy vấn - chỉ là một ý nghĩ! Im không nhận thức được ở trên là có thể là tập tin res :) – Dori

Trả lời

0

Vâng, tôi không nghĩ điều này là có thể. Bởi vì một khi các tài nguyên được phân bổ android sẽ không cho phép chúng ta thay đổi chúng một cách năng động trong không khí. Thay vào đó, bạn có thể thử các chuỗi của mình trong một lớp riêng biệt và thay đổi chúng khi bạn chạy qua mã của mình.

+1

Tôi không quan tâm đến việc thay đổi chuỗi tại thời gian chạy, mà là việc tạo mã của Android tạo lớp R.java làm thay thế cho tôi tại thời điểm thiết kế. Rõ ràng nó là không thể. –

7

Thêm% s vào chuỗi tài nguyên thứ hai của bạn (chuỗi bạn muốn động) nơi bạn muốn sửa đổi. ví dụ:

<resources> 
<string name="db_table_name">tbl_name</string> 
<string name="ddl">create table %s</string> 
</resources> 

và getString sử dụng mã của bạn() để làm việc kỳ diệu,

getString(R.string.ddl, getString(R.string.db_table_name)); 
+0

Tôi biết cách tiếp cận này. Tôi đã tự hỏi nếu công cụ Android sẽ làm điều này khi R.java được tạo ra. Sử dụng câu trả lời được đề xuất vẫn yêu cầu tôi làm tất cả công việc. –

1

Đó là thực sự tốt.

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE resources [ 
    <!ENTITY appname "MyAppName"> 
    <!ENTITY author "MrGreen"> 
]> 

<resources> 
    <string name="app_name">&appname;</string> 
    <string name="description">The &appname; app was created by &author;</string> 
</resources> 

Bạn thậm chí có thể định nghĩa thực thể của bạn globaly ví dụ:

res/thô/entities.ent:

<!ENTITY appname "MyAppName"> 
    <!ENTITY author "MrGreen"> 

res/values ​​/ string.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE resources [ 
    <!ENTITY % ents SYSTEM "./res/raw/entities.ent"> 
    %ents; 
]> 

<resources> 
    <string name="app_name">&appname;</string> 
    <string name="description">The &appname; app was created by &author;</string> 
</resources> 
Các vấn đề liên quan