如何在常量文件中获取字符串资源的值?

5
我正在处理一个需要将字符串资源的值转换为常量的应用程序。请问如何实现?

该字符串位于

Application/res/values/strings.xml

并且该资源的名称为app_version。现在我想在另一个文件中将此应用版本获取为常量字符串。谢谢。

4个回答

5
尝试使用context.getResources().getString(R.string.app_version),其中'context'是您的Activity或Application实例。如果您的问题确实是关于获取应用程序版本名称,则有更好的方法:
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

这种方式可以直接从AndroidManifest中检索信息,无需进行两次维护。

1
可以工作,但是如果您想要一个静态的 final String 常量,仅仅指向 strings.xml 中的一个字符串呢?编译器会对 "static" 部分报错。 - SMBiggs

4

@Justin... 那真是件非常简单的事情,但谢谢你帮我解决了这个问题..;-) - Usama Sarwar
4
不是很对。R.string.string_name 是引用字符串的 ID(一个整数)。而 OP 可能想要的字符串本身是完全不同的东西(一个 String)。 - SMBiggs

0

我也想做这件事,但经过思考,我不确定是否可行。我们试图在编译时设置一个在运行时才可用的值。

常量是在编译时设置的。此时可以使用资源ID,但是Android可以通过语言环境更改该值,因此字符串值直到运行时才可用。

我的解决方法是创建一个公共静态变量,并在创建时将其赋值为字符串值(如果它为空)。我可能应该只使用普通的实例变量,但这种方法有效。尽管如此,您仍然可以覆盖该值。

public class MyFragment 
...    
    public static String SHOW_FOO;
...

    public View onCreateView(...
    if (SHOW_FOO == null) {
        SHOW_FOO = getResources().getString(R.string.settings_foo_key);
    }
....

0
所有的回答都不是最新的。这是正确的方法。 最好使用

@StringRes

public class AndroidClass{
...
    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.tab1, R.string.tab2, R.string.tab_2};

 private final Context mContext;
...


     public CharSequence getString(int position) {
         return mContext.getResources().getString(TAB_TITLES[position]);
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接