22

我只是想知道@string在实际Java代码中使用而不是硬编码字符串的好处/开销是什么......例如:

// To get the string resource:
getActivity.setTitle(getString(R.string.my_string));

这是操作栏标题、动态创建的按钮文本等的最佳实践吗……还是我应该这样做:

// Hardcoded string
getActivity.setTitle("My String");

我知道第一种方式会有更多的开销。只是不确定最佳实践是什么。

4

5 回答 5

28

如果您不知道拥有该@string系统的实际意义,请阅读本地化文档。它使您可以轻松地在应用程序中找到文本,然后再将其翻译。

编辑 感谢 Hippo 解决这个问题。

无论使用何种方法(Strings.xml 与编程方式),使用相同值的多个字符串似乎都没有任何相关的开销。根据 Oracle “所有文字字符串和字符串值的常量表达式都是实习的”,这意味着如果您再次使用该对象,则该对象将被重用而不是重新创建。

于 2012-11-24T04:33:24.220 回答
9

将字符串硬编码到布局文件/代码中并不是一个好习惯。您应该将它们添加到字符串资源文件中,然后从您的布局中引用它们。

原因:

  • 这允许您通过编辑您的 strings.xml 文件同时更新所有布局中相同单词的每次出现。
  • 它对于支持多种语言也非常有用,因为单独的 strings.xml 文件可用于每种支持的语言。

正如文档所说:

假设您的应用程序的默认语言是英语。还假设您希望将应用程序中的所有文本本地化为法语,并将应用程序中的大部分文本(除应用程序标题之外的所有内容)本地化为日语。在这种情况下,您可以创建三个备用 strings.xml 文件,每个文件都存储在特定于语言环境的资源目录中

我认为这些理由足以推荐去@String

于 2012-11-24T04:57:06.510 回答
3

这样,您就有了一个固定的位置来更改项目中的所有字符串。假设您在代码的 10 个不同位置使用了相同的字符串。如果你决定改变它怎么办?无需搜索它在项目中的所有使用位置,您只需更改一次,更改就会反映在项目中的任何地方。

于 2012-11-24T04:33:23.630 回答
1

那么 strings.xml 必须被解析,不是吗?然后我认为硬编码对性能来说是最好的,尽管在运行时可能不明显。人们确实选择使用它,以便将所有字符串集中在一个位置,以防有翻译应用程序的计划。

于 2012-11-24T04:43:21.197 回答
0

在 strings.xml 文件中设置字符串有很多好处;简而言之,它允许您在多个位置使用相同的字符串,如果您以后需要修改字符串,这很好。它还允许您以不同的语言显示相同的文本;对字符串进行硬编码并不能为您提供所有这些选项。
顺便说一句,您不需要将每个文本都放在 strings.XML 文件中;只有那些可能在应用程序中的多个地方使用的那些。
在 strings.xml 文件中放置字符串的一般规则如下:

  • 它会在多个地方使用吗?
  • 它会以多种语言使用吗?
  • 它是动态的还是静态的?

我敢肯定还有其他原因,但这些是我知道的。

希望这会有所帮助。

于 2012-11-24T04:46:36.953 回答