我听说使用editor.putString("Message","Hello");
是不正确的做法,您应该改为editor.putString(getString(R.string.messagestring),"Hello");
。但为什么?它更长,具有相同的结果,并且看起来更凌乱。是不是因为打错字更难?
这是Signal的一个示例: Source
if (params[0] < SCREENSHOTS) {
boolean screenSecurity = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(TextSecurePreferences.SCREEN_SECURITY_PREF, true);
TextSecurePreferences.setScreenSecurityEnabled(getApplicationContext(), screenSecurity);
}
答案 0 :(得分:2)
String
值是错误的。
这样做会使本地化成为不可能。
另一方面,R.string.
中的值会自动使用正确的语言(假设您使用values
,values-es
,values-fr
,...并放置翻译)< / p>
注意:您可能不应该翻译key
的{{1}}而是值(SharedPreference
)的一部分,因为这大概是人类可读的东西。
"Hello"
如果用户更改设备语言,则密钥可能会更改,这意味着将不再在新密钥下找到旧的存储值。如果您希望将键放在中央位置,则最好在代码中将它们定义为editor.putString("message", getString(R.string.messagestring));
常量。
static final
我实际上会考虑使用来自editor.putString(MyPrefConstants.PREF_MESSAGE, getString(R.string.messagestring));
的密钥是一个非常可疑的设计决策。这适用于打算由机器消耗的任何内容,而不是对用户可见的文本。有一些例外,但很少见。
答案 1 :(得分:0)
这一切与维护,可重复使用性,清洁度有关,如果需要,还可以简化本地化。
以"Message"
为例。
如果它是“首选项”的键,那么您将在代码中使用此字符串多少次?大于1,对吗?想象一下,您一遍又一遍地写了“消息”。难道至少一次拼错了吗?好吧,您不能拼错字符串资源,因为编译器不会允许您。
另一件事:您知道所有UI字符串在哪里,因此当您需要更改其中的1个字符串时,您便知道该在哪里寻找,一旦更改,整个应用程序中的字符串都会更改。
最后,如果您希望自己使用多种语言,这是AS提供的Editor的唯一方法。
编辑:关于Preferences
之类的字符串是否应该放在Resources
中的问题,我的回答是是。程序员应为字符串资源提供正确的ID,以区分UI项与应用内项。
答案 2 :(得分:0)
这不是不必要,而是良好实践。
例如
editor.putString("Message","Hello");
在这里键->“消息”
有时您可能会因输入错误消息或错误消息而将“消息”写入“按摩”或其他内容。
为避免这类情况,我们应该这样写
editor.putString(getString(R.string.messagestring),"Hello");