【问题标题】:Hide String placeholder when using initial String from xml使用 xml 中的初始字符串时隐藏字符串占位符
【发布时间】:2017-12-30 14:01:50
【问题描述】:

这个问题是关于 Android 中的字符串占位符机制。有很多关于“我如何使用占位符”等的帖子,但我的问题完全不同(或者我只是很愚蠢),我在网上找不到答案。

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

关键是,如果我有像

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

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

那么我们该怎么做呢?

干杯

【问题讨论】:

    标签: android string resources placeholder


    【解决方案1】:

    字符串中的%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" 在设计时查看字符串(尽管这仍将包括任何格式说明符)。但是,真正的用户永远不会看到此文本。

    【讨论】:

    • 好的,有人说这不可能满足我的需求:我猜我只是使用“”作为实际值参数,因为我最初需要该值是空的..这就是原因问题...
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2013-07-09
    相关资源
    最近更新 更多