Java 在Android中,是否有理由对不需要翻译的字符串使用字符串资源?

Java 在Android中,是否有理由对不需要翻译的字符串使用字符串资源?,java,android,android-resources,Java,Android,Android Resources,我想知道在Android代码中使用java文件中定义的字符串有什么缺点 我喜欢将普通的旧Java字符串用于不可见的字符串,例如,我正在解析的XML文档中的名称,或捆绑包的键。将所有这些东西都保存在java文件中,而不是将它们移到XML文件中,使代码更加复杂,这似乎是一个好主意 然而,我看到许多Android代码示例似乎将每个字符串都放入了一个资源文件中 在java文件中使用字符串有什么问题?人们不这样做的原因是什么?我一直在我的应用程序中这样做,到目前为止还没有发现任何问题 请注意,我知道XML

我想知道在Android代码中使用java文件中定义的字符串有什么缺点

我喜欢将普通的旧Java字符串用于不可见的字符串,例如,我正在解析的XML文档中的名称,或捆绑包的键。将所有这些东西都保存在java文件中,而不是将它们移到XML文件中,使代码更加复杂,这似乎是一个好主意

然而,我看到许多Android代码示例似乎将每个字符串都放入了一个资源文件中

在java文件中使用字符串有什么问题?人们不这样做的原因是什么?我一直在我的应用程序中这样做,到目前为止还没有发现任何问题

请注意,我知道XML文件对于需要翻译的内容非常有意义。这个问题适用于字符串保持不变的情况

让我把这个问题说清楚:

除了以下原因外,还有其他原因吗

  • 因为这是一个标准/最佳实践等等-我的问题基本上是:为什么这是一个最佳实践,仅仅是因为i8n,还是有其他原因
  • 因为它允许您使用资源框架进行翻译、设备相关字符串等
  • 因为它允许您使用非ASCII字符

事实上,良好的实践是这样做的一个很好的理由,但还有更多


例如,我现在能回忆起的一个原因是strings.xml是UTF-8编码的。硬编码字符串不能正确显示某些字符。

您的问题的简单答案是将所有字符串放入资源中是一个标准。还有很多原因,如果要将字符串保存在xml/java文件中,则必须为单个字符串更新这些文件中的每个引用

例如,如果您想将“确定”更改为“确认”5个不同文件中使用的内容,您必须更改所有这5个文件,但对于字符串资源,您只需更新一个文件,即String.xml

编辑

请在下面找到我们应该使用String.xml的一些原因

1) 将单个引用更新为多个引用。根据@treesareverywhere,它可以在公共静态字符串中完成,但在应用程序启动时以及应用程序关闭之前,它将占用内存。但使用String.xml编写的字符串将在使用时加载

2) 多语言支持。您可以创建多语言资源文件夹以支持您的多语言应用程序,以便操作系统在运行时根据语言资源文件夹动态维护使用区域设置更改的语言

3) 请查看提供有关使用string.xml的更多信息的文档

4) 字符串不会使您的应用程序代码杂乱无章,使其清晰易维护

它是一种编码标准,就像其他语言一样。但如果需要,您可以忽略它,并且可以在代码中使用公共静态字符串变量创建代码。使用string.xml不是强制性的,但使用它是一种很好的编码实践。良好的实践,比如用包含单个语句的括号关闭if块,而不是保持原样


if(condition){statement;}
而不是
if(condition)语句

strings.xml(和其他*.xml资源文件)的目的是将类似的值重新组合到一个位置。这有助于查找可能隐藏在代码中的值。这些资源文件也会更好,因为对一个值的修改可能会产生应用程序范围的效果(例如更改应用程序标题或主题)。最后,正如您所提到的,它提供了一个将您的应用程序翻译为其他语言的框架

如果你知道你的应用程序不会被翻译,也不会被修改,那么硬编码并不是一件坏事。但是,如果您认为您的应用程序将获得大量更新,那么最好开始使用良好的基础并使用XML资源文件

除了这些原因和@zing提到的原因(我不知道也不能确认),没有其他原因可以解释为什么要使用XML资源文件


使用资源文件的缺点是理论上速度较慢,并且需要更多的内存。阅读和

如果您将所有与应用程序相关的字符串放在一起,那么您可以非常轻松地实现I18N类型的应用程序,并且在进行应用程序更改(公司接管其他公司)时非常有用。只需更改xml文件中的名称即可。无需触摸任何java文件。

使用:mTextView.setText(“hello world”);与mTextView.setText(getResources().getString(R.id.hello))相同;问题是。。。XML真的组织得很好,可以翻译,可以很容易地找到和编辑。。。就那样。嗯,不,不一样;-)我认为,将钥匙等放在使用位置附近是有道理的。防止“解决方案蔓延”。我知道这是不一样的。。。但如果你只想用一次,你可以用那种方式。取决于你是与团队合作还是单独工作,如果单独工作。。。每个人都知道自己的乱七八糟:PI实际上会说,如果你有私有字符串常量,有时候就不那么乱七八糟了:)对不起,但这并不能完全回答问题。通过使用静态公共字段,也可以在Java代码中实现分组。我并不是说你写的东西是错的,但我想知道为什么它是一个标准。每种语言和每一项都有自己的标准要写,你可以选择不以这种方式写,让你的代码凌乱不堪。您也可以在java文件中创建屏幕设计,但android提供了xml文件来实现这一点。它只是减少了开销和内存问题。我同意您可以创建公共静态字段,但它只会在应用程序启动时消耗内存。在String.xml文件中,这些字符串id将是se