使用来自 xml 的初始字符串时隐藏字符串占位符

Hide String placeholder when using initial String from xml

这个问题是关于 Android 中的字符串占位符机制的。有很多关于 "how can I use placeholders" 等的帖子,但我的问题完全不同(或者我只是愚蠢),我无法在网上找到答案。

如何在通过 xml 文件引用字符串资源时隐藏占位符?

重点是,如果我有像

这样的字符串资源
<string name=mystring>There comes the placeholder: %s</string>

我在我的 whatever.xml 文件中使用它,并将 TextView 的文本设置为 android:text="@string/mystring" 然后它实际上真正显示 "There comes the placeholder: %s"。但是你可以想象我想避免用户看到“%s”;-)

那么我们该怎么做呢?

干杯

字符串中的 %s 不仅仅是一个占位符,它是一个 格式说明符 。你可以在这里阅读所有关于它们的信息:https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

对您的问题的简短回答是,不可能向您的用户隐藏此格式说明符。但是,这是因为其中带有格式说明符的字符串 不应 用作 android:text 属性的简单参数。

这些字符串资源的正确使用是在运行时(在 Java 中)使用 Resources.getString(int id, Object... formatArgs)(或 Activity.getString(int id, Object... formatArgs))填充 TextView 的文本,在什么时候你将传递实际值以替换到你的字符串中。

使用您的示例中的命名,您可能会得到如下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView myTextView = (TextView) findViewById(R.id.mytextview);
    myTextView.setText(getString(R.string.mystring, "real value"));
}

请注意,您可以在布局中使用 tools:text="@string/mystring" 以在设计时查看字符串(尽管这仍将包括任何格式说明符)。不过,真正的用户永远不会看到这段文字。