Công cụ đóng gói tài sản Android ( aapt
) đã trở nên rất nghiêm ngặt trong phiên bản mới nhất và hiện được sử dụng cho tất cả các phiên bản Android. Lỗi aapt mà bạn nhận được được tạo vì nó không còn cho phép các chỉ định định dạng không định vị .
Dưới đây là một vài ý tưởng về cách bạn có thể bao gồm% -symbol trong chuỗi tài nguyên của mình.
Nếu bạn không cần bất kỳ định dạng hoặc thay thế định dạng nào trong chuỗi của mình, bạn chỉ cần sử dụng formatted
thuộc tính và đặt thành false
:
<string formatted="false">%a + %a == 2%a</string>
Trong trường hợp này, chuỗi không được sử dụng làm chuỗi định dạng Formatter
để bạn không phải thoát% -symbols của mình. Chuỗi kết quả là "% a +% a == 2% a".
Nếu bạn bỏ qua formatted="false"
thuộc tính, chuỗi được sử dụng làm chuỗi định dạng và bạn phải thoát% -symbols. Điều này được thực hiện chính xác với double-%:
<string>%%a + %%a == 2%%a</string>
Bây giờ aapt
cung cấp cho bạn không có lỗi nhưng tùy thuộc vào cách bạn sử dụng nó, chuỗi kết quả có thể là "%% a + %% a == 2 %% a" nếu a Formatter
được gọi mà không có bất kỳ đối số định dạng nào :
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"
Không có bất kỳ xml và mã nào, thật khó để nói chính xác vấn đề của bạn là gì nhưng hy vọng điều này sẽ giúp bạn hiểu các cơ chế tốt hơn một chút.