【问题标题】:How to load a resource name procedurally?如何以程序方式加载资源名称?
【发布时间】:2014-11-18 00:59:19
【问题描述】:

一点上下文,我正在使用 Eclipse 编写一个使用 Java 的 android 游戏/应用程序。一个函数返回一个变量“flag”,它告诉渲染函数在屏幕顶部绘制一个窗口。我的代码如下所示:

if(flag == 3000){
window.setBitmap(BitmapFactory.decodeResource(res, R.drawable.tutorialdiagram_3000));}

else if(flag == 3001){
window.setBitmap(BitmapFactory.decodeResource(res,R.drawable.tutorialdiagram_3001));}

else if(flag == 3002){
window.setBitmap(BitmapFactory.decodeResource(res,R.drawable.tutorialdiagram_3002));}

else if(flag == 3003){
window.setBitmap(BitmapFactory.decodeResource(res,R.drawable.tutorialdiagram_3003));}

else if(flag == 3004){
window.setBitmap(BitmapFactory.decodeResource(res,R.drawable.tutorialdiagram_3004));}

如果我可以用一行简单地完成所有这些,那就太好了。这将类似于(来自 Flash 动作脚本)

if(flag >= 3000){
    window.setBitmap(BitmapFactory.decodeResource(res, escape("R.drawable.tutorialdiagram_" + flag)));
}

我确信有一种超级简单的方法可以做到这一点。我应该在第一天就学会了,等等。谁能第一个给我上课?

【问题讨论】:

    标签: java android eclipse string r.java-file


    【解决方案1】:

    你可以使用这样的东西(用你的包名替换“my.package”):

    int id = res.getIdentifier("tutorialdiagram_" + flag, "drawable", "my.package");
    window.setBitmap(BitmapFactory.decodeResource(res,id));
    

    【讨论】:

    • 天哪,第一次尝试就成功了!谢谢!顺便说一句,我必须将包名放在引号中。我不确定。
    • 现在,如果另一个程序员看到我的代码,并且看到了那部分,我不必完全尴尬。哈哈
    • 字符串有类似的功能吗?例如,使用标志变量来缩短它? res.getString(R.string.flag_1);
    • 同样的事情,只是传递“string”而不是“drawable”。
    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多