2010-09-15 34 views
9

Tôi đã cố gắng sử dụng tài nguyên đa nguyên với Android nhưng chưa có bất kỳ may mắn nào.Android Số nhiều không hoạt động, cần trợ giúp

Đây là tập tin nguồn của tôi cho số nhiều của tôi:

<?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
     <plurals name="meters"> 
      <item quantity="one">1 meter</item> 
      <item quantity="other"> 
       <xliff:g id="count">%d</xliff:g> 
       meters 
      </item> 
     </plurals> 
     <plurals name="degrees"> 
      <item quantity="one">1 degree</item> 
      <item quantity="other"> 
       <xliff:g id="count">%d</xliff:g> 
       degrees 
      </item> 
     </plurals> 
    </resources> 

... và sau đó ở đây là mã Tôi đang sử dụng khi tôi cố gắng để trích xuất các chuỗi lượng từ các nguồn tài nguyên của tôi:

Resources res = this.getResources(); 
tTemp.setText(res.getQuantityString(R.plurals.degrees, this.mObject.temp_c.intValue())); 

... nhưng văn bản trong TextView vẫn là %d degrees%d meters.

Có ai biết điều gì đang xảy ra không? Tôi đã gỡ lỗi mã và lệnh res.getQuantityString (...) đang trả về một Chuỗi có giá trị là %d degrees hoặc %d meters. Mặc dù khi số lượng xảy ra là 1, nó sẽ đánh giá chính xác đến 1 degree hoặc 1 meter.

Cảm ơn bạn đã giúp đỡ!

Kính trọng, thiên thể.

Trả lời

31

Có vẻ như bạn cần chỉ định số hai lần, số đầu tiên được sử dụng để xác định chuỗi sử dụng và chuỗi thứ hai là chuỗi được thay thế thành chuỗi. ví dụ.

Resources res = this.getResources(); 
int tv = this.mObject.temp_c.intValue(); 
tTemp.setText(res.getQuantityString(R.plurals.degrees, tv, tv)); 

Và ít nhất là trong thử nghiệm của tôi cho đến nay, các yếu tố xliff:g không cần thiết.

+0

OMG, điều này đã khiến tôi lo lắng một thời gian, cảm ơn! –

4

Android "hỗ trợ" việc sử dụng số nhiều bằng cách sử dụng R.plurals thực tế không có giấy tờ. Lặn vào mã nguồn tiết lộ rằng bạn sẽ có thể có các phiên bản có thể sau một chuỗi:

  • "zero"
  • "một"
  • "vài" (cho chính xác 2)
  • "khác" (cho 3 người trở lên)

Tuy nhiên, tôi đã thấy rằng chỉ "một" và "khác" thực sự hoạt động (mặc dù những người khác đang được sử dụng trong nguồn Android!).

Để sử dụng số nhiều bạn muốn khai báo bạn chuỗi pluralizable theo cách tương tự với các nguồn lực chuỗi bình thường:

<resources> 
    <plurals name="match"> 
    <!-- Case of one match --> 
    <item quantity="one">1 match</item> 
    <!-- Case of several matches --> 
    <item quantity="other">%d matches</item> 
    </plurals> 
</resources> 

Sau đó, để thực sự sử dụng chúng trong mã, mã sử dụng tương tự như những gì superfell gợi ý ở trên:

String text = getResources().getQuantityString(R.plurals.match, myIntValue, myIntValue); 
myTextView.setText(text); 
+6

Tôi có thể thêm rằng "không" không hoạt động cho tiếng Anh, vì nó được ghi rõ trong tài liệu 'Một chuỗi cho số không bằng tiếng Anh sẽ bị bỏ qua ngay cả khi số lượng là 0, bởi vì 0 không khác biệt về mặt ngữ pháp từ 2, hoặc bất kỳ số nào khác ngoại trừ 1' (http://developer.android.com/guide/topics/resources/string-resource.html#Plurals) – Fixpoint

+2

@Shooshpanchick, cảm ơn - không biết điều đó. Tuy nhiên, điều này thật tuyệt vời khi có thể sử dụng 'no matches' thay vì '0 matches' – pheelicks

3

Cùng một vấn đề ở đây! Tôi đoán nó chỉ là một lỗ hổng trong tài liệu. Phương thức "tinh khiết" getQuantitiyString(int, int) chỉ nhận được tài nguyên văn bản mà không có bất kỳ định dạng nào. Như superfell đã nêu: chỉ cần sử dụng phương thức getQuantityString(int, int, Object...) và trao giá trị số nguyên của bạn hai lần.

Tôi hy vọng công việc này giống như cách bạn đã làm, nhưng đơn giản là không !!

PS: có thể kiểm tra câu trả lời là câu trả lời chính xác?;-)

Các vấn đề liên quan