使用简单字符串,您可以使用Resources.getQuantityString(int, int, ...)
来传递占位符值。因此复数资源可以在字符串中使用%d,您可以插入实际数量。
我希望在复数形式内使用字体标记<b>
等。所以我在看Resources.getQuantityText(int, int)
。遗憾的是,您无法传递占位符值。我们在源代码中看到,在带有占位符的getQuantityString中,它们使用String.format。
是否有使用复数字体格式的解决方法?
答案 0 :(得分:3)
首先,让我们看看“正常”情况(不起作用的情况)。你有一些复数资源,如:
textView.setText(getResources().getQuantityString(R.plurals.myplural, 2, 2));
你在Java中使用它是这样的:
<b>
正如您所发现的,这只会让您看到没有粗体的“2项”。
解决方案是将资源中的<plurals name="myplural">
<item quantity="one">only 1 <b>item</b></item>
<item quantity="other">%1$d <b>items</b></item>
</plurals>
标记转换为使用html实体。例如:
String withMarkup = getResources().getQuantityString(R.plurals.myplural, 2, 2);
text.setText(Html.fromHtml(withMarkup));
现在,您需要在Java代码中添加另一个步骤来处理这些html实体。 (如果你没有更改java,你会看到“2&lt; b&gt; items&lt; / b&gt;”。)这是更新后的代码:
class Mutation{
public static void main(String [] args){
int i=0;
String SPECIAL_CHARS = "?!$@";
String password = "Something";
for (int pos = 0; pos < password.length(); pos++) {
char c = password.charAt(pos);
if(SPECIAL_CHARS.indexOf(c) < 0) {
i++;
}
}
}
}
现在您将成功看到“2 项目”。
答案 1 :(得分:0)
您可以将字符串包装在<div style="background-color: grey; padding: 13px;"><h1>This part of the site is the menu, this part should be unnafected</h1></div>
<div class="flex">
<div>
<h1>This part should be closer to the left side</h1>
</div>
<div>
<h1>This part should be closer to the right side</h1>
</div>
</div>
和<![CDATA[
中,而不是转义HTML标签:
]]>
此外,在Kotlin中,您可以创建扩展功能,以便可以使用<plurals name="myplural">
<item quantity="one"><![CDATA[only 1 <b>item</b>]]></item>
<item quantity="other"><![CDATA[%1$d <b>items</b>]]></item>
</plurals>
检索样式化的复数:
resources.getQuantityText(R.plurals.myplural, 2, 2)