เครื่องมือการบรรจุสินทรัพย์ของ Android ( aapt
) ได้กลายเป็นเข้มงวดมากในรุ่นล่าสุดและตอนนี้ใช้สำหรับAndroid ทุกรุ่น aapt ข้อผิดพลาดที่คุณได้รับจะถูกสร้างขึ้นเพราะมันไม่ช่วยให้specifiers รูปแบบที่ไม่ตำแหน่ง
นี่คือแนวคิดบางประการที่คุณสามารถรวม% -symbol ในสตริงทรัพยากรของคุณได้
หากคุณไม่ต้องการตัวระบุรูปแบบหรือการแทนที่ในสตริงของคุณคุณสามารถใช้formatted
คุณลักษณะและตั้งค่าเป็นfalse
:
<string formatted="false">%a + %a == 2%a</string>
ในกรณีนี้สตริงจะไม่ถูกใช้เป็นสตริงรูปแบบเพื่อFormatter
ให้คุณไม่ต้องหลบหนี% -symbols ของคุณ สตริงผลลัพธ์คือ "% a +% a == 2% a"
หากคุณไม่ใช้แอformatted="false"
ททริบิวสตริงนั้นจะใช้เป็นสตริงรูปแบบและคุณต้องหลีกเลี่ยง% -symbols สิ่งนี้ทำได้อย่างถูกต้องด้วย double-%:
<string>%%a + %%a == 2%%a</string>
ตอนนี้aapt
ไม่มีข้อผิดพลาด แต่ขึ้นอยู่กับวิธีการใช้งานสตริงที่ได้อาจเป็น "%% a + %% a == 2 %% a" ถ้า a Formatter
ถูกเรียกใช้โดยไม่มีอาร์กิวเมนต์รูปแบบใด ๆ:
Resources res = context.getResources();
String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"
String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"
หากไม่มี xml และรหัสมันเป็นการยากที่จะบอกว่าปัญหาของคุณคืออะไร แต่หวังว่าจะช่วยให้คุณเข้าใจกลไกได้ดีขึ้นเล็กน้อย