静态访问Android应用程序的资源?
我有一个问题。 一个Android应用程序的资源:
我的应用程序有其他问题。 模式(编辑/计划/执行),我想用枚举类型来描述。 然而,我想要用源自资源string.xml文件的字符串来填充枚举值,即不是
enum Mode {
EDIT ("edit"),
PLAN ("plan"),
EXEC ("exec");
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
};
我想写一些像:
enum Mode {
EDIT (getResources().getText(R.string.mode_edit).toString()),
PLAN (getResources().getText(R.string.mode_plan).toString())),
EXEC (getResources().getText(R.string.mode_exec).toString()));
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
}
这将例如允许使用资源文件来修改模式的名称,从而允许在没有代码改变,国际化等的情况下进行以后的名称修改。
问题是,对资源的标准访问是通过一个Activity的getResources()方法实现的,该方法仅在构造函数中(和实例方法期间)可用。 然而,枚举声明是类的静态初始化代码的一部分。 有没有办法以静态方式访问应用程序的资源?
迈克尔
enum Mode {
EDIT (R.string.mode_edit),
PLAN (R.string.mode_plan),
EXEC (R.string.mode_exec);
String id;
Mode(String id) { this.id = id; }
public String getName(Resources r){ return r.getText(id); }
@Override
public String toString() { return this.name; }
}
或者你可以做以下事情:
public class ClassName {
public static Resources res;
}
在您的Application.onCreate()
或Activity.onCreate()
:
ClassName.res = getResources();
并在你的enum Mode
:
@Override
public String toString() {
Resources res = ClassName.res;
if (res==null){ return super.toString(); }
else { return res.getText(id); }
}
谢谢,radek-k,为例子! 在此期间,我提出了一个类似的想法,即我在枚举中添加了一个静态方法,然后在Activity的onCreate()方法中传递资源句柄。 这允许toString() - 方法然后访问资源字符串。 恕我直言,不是很优雅,但它的作品...
干杯,迈克尔
基于这个https://stackoverflow.com/a/3560656/262462,因为R.string包含整数
enum Mode {
EDIT (R.string.mode_edit),
PLAN (R.string.mode_plan),
EXEC (R.string.mode_exec);
int id;
Mode(int id) { this.id = id; }
public String toString(Resources r) { return r.getString(id); }
}
链接地址: http://www.djcxy.com/p/59995.html
上一篇: Static access to an Android app's resources?
下一篇: Retrieving all Drawable resources from Resources object