Eclipse/Java - R.string.* 中的值返回 int?

Posted

技术标签:

【中文标题】Eclipse/Java - R.string.* 中的值返回 int?【英文标题】:Eclipse/Java - Values in R.string.* return int? 【发布时间】:2010-12-31 07:28:23 【问题描述】:

我认为我会很优雅,并使用 string.xml 文件为异常消息等内容定义一些常量字符串。在 strings.xml 中,我点击 Add,选择“String”选项(不是“String Array”),然后给它一个名称和值。看到这段代码不起作用,我很惊讶:

throw new Exception(R.string.MyExceptionMessage);

这失败了,因为 R.string.MyExceptionMessage 实际上是 int 类型。我可以通过查看 R.java 来验证该类型。我错过了什么?

【问题讨论】:

【参考方案1】:

R 类中的所有内容都是引用,因此它只是定义为 int

如果您的代码在 android Context 内运行或可以访问,您可以调用 context.getString(R.string.my_exception_message) 以获取实际的 String 值。

或者,对于不需要翻译的异常字符串,因此不需要在 Android 资源 .xml 文件中严格定义,您可以将字符串作为常量存储在某种 StringConstants 中界面。这样您就可以从可能无法访问Context 的实用程序类中引用字符串。

【讨论】:

Chris 在这两个帐户上都是正确的。 Context.getString 加载您的字符串资源。但请注意不要将不可本地化的内容放在那里,因为它会与您的翻译字符串混在一起。我不会认为它很优雅,但必须将您的 UI 字符串放入 XML 文件而不是代码中。在某个时候,您会希望将您的应用程序分发到其他国家/地区,并且将它们从代码中移除需要大量的努力。现在就做,省去头痛。我在中国有一个分销商,我只是将 strings.xml 发送给她进行翻译,不费吹灰之力。问候,阿里【参考方案2】:

使用“getResources().getString(id)”方法。

  getResources().getString(R.string.title_activity)

然后繁荣,你有你的字符串。请务必将该字符串存储在 values 文件夹中的 string.xml 文件中。

【讨论】:

getResources() 方法并不总是可用。【参考方案3】:

克里斯是对的。但是如果你也想本地化异常字符串怎么办。例如,您抛出一个异常,当您捕获它时,您希望向用户显示异常消息。我想将它们放在 strings.xml 中,但同时我不想使用此代码

throw new Exception(context.getString(R.string.my_exception_message))

因为我认为如果你得到一个异常可能你不想要并且你不能使用一些额外的代码来获取异常消息。

我认为唯一的解决方案是在主 Activity 中为此消息声明一个静态字符串并尽快初始化它(例如在 onCreate() 方法中),如下所示:

private static String my_exception_message;

public onCreate()

    my_exception_message = context.getString(R.string.my_exception_message);

因此,当您抛出异常时,您的本地化消息就可以使用了。 你认为呢?你能想到一些其他的解决方案吗?

【讨论】:

以上是关于Eclipse/Java - R.string.* 中的值返回 int?的主要内容,如果未能解决你的问题,请参考以下文章

R.string.value 帮助android通知

Android setText/R.string/values

没有文本 R.string 链接可能?字符串 [] 名称 = ;

Eclipse/Java - 导入 java.(namespace).* 有害吗?

停止运行多个实例的 Eclipse/Java

r“string”b“string”u“string”Python 2/3比较