0

使用库项目时,我在按名称获取资源 id 时遇到问题:

int resId = context.getResources().getIdentifier("myresname", "drawable", "net.iberdroid.mygamecore");

将项目用作库时,这似乎总是返回 0,但是当它是一个独立项目时,它可以完美地工作。

net.iberdroid.mygamecore 是这些资源所在的位置,实际上它们就在那里。

该代码甚至在库项目包中执行,而不是从链接它的 android 项目中执行。

有任何想法吗?

4

1 回答 1

1

我找到了一个解决方案,但这有点奇怪,因为我使用一个库来不对同一游戏的不同版本(通常是免费和付费版本)进行重复更改,这也有点烦人。

在此上下文中,net.iberdroid.mygamecore 是付费版和免费版共享的图书馆项目,net.iberdroid.gamefree 和 net.iberdroid.gamepro 是免费和付费版游戏的 Android 项目。

如果我通过“net.iberdroid.gamefree”更改先前代码上的包名称,它可以正常工作。但问题是该代码在库中,并且也将被“net.iberdroid.gamepro”使用,因此放置免费版本的包名称会破坏付费版本,反之亦然。

因此,如果我仍想在库中共享该代码,我将需要动态获取项目的包名称。所以这可以解决问题:

public static int getDrawableId(String dname) {
    String pn = context.getPackageName();
    int resId = context.getResources().getIdentifier(dname, "drawable", pn);
    return resId;
}
于 2012-07-24T11:44:56.823 回答