从包含在JAR中的资源中扩展Android布局

时间:2014-06-30 11:34:20

标签: java android eclipse jar

我正在为Android项目构建一个库,它包含一个从XML中扩展布局的View子类。我将它导出到JAR(右键单击项目 - >导出 - > Tick类和资源),我已经验证了类,XML资源和依赖JAR库都在那里。

我的观点的构造函数是这样的:

MyView(Context aContext, AttributeSet aAttrs)

视图通过XML添加。上下文是包含库的项目,因此aContext.getPackageName()返回最终项目的包。

要查找我的视图的XML以使其膨胀,我这样做:

int layout_id = context.getResources().getIdentifier("name_of_layout", "layout", context.getPackageName());
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rootLayout = (RelativeLayout) inflater.inflate(layout_id, this, true);

这不起作用,因为context.getPackageName()返回最终项目的包名称,资源在JAR中。我已经尝试将其更改为库项目的包名称。那没用。奇怪的是,类MyView在JAR中,我import在最终项目中使用该类的JAR包名称。

为了使事情变得复杂,我有两个项目:一个包含导出的JAR的Android库项目,以及一个使用JAR中的内容的项目。 JAR库,包含JAR的库项目以及使用JAR中的内容的最终项目都具有不同的包名称。

如何找到布局的正确资源ID?

我应该使用哪个Context以及哪个包名?我可以在JAR中设置此包名称,而不管它引用的库或项目。

2 个答案:

答案 0 :(得分:0)

  

我将它导出到JAR(右键单击项目 - >导出 - > Tick类和资源),并且我已经验证了类,XML资源和相关JAR库都在那里。

那里的XML资源文件将毫无用处。 Android不使用Java JAR资源。

我甚至不确定依赖的JAR是否有效,尽管我不会排除它。

您需要将此视为其他项目所依赖的普通Android库项目,或者转移到Gradle / Android Studio并将其打包为AAR( 包含Android资源)。

或者,摆脱资源(例如,将布局代码转换为相应的Java代码)。

答案 1 :(得分:0)

您无法在jar文件中打包xml或可绘制资源,然后在其他项目中使用它们。 你面前有两种选择, 1.只需使用普通的Android库项目而不是jar文件 2.移至基于gradle的build / Android Studio并为库创建* .aar文件。这是一个新类型,包含库项目中的类和所有资源。