我正在为一个Android项目构建一个库,它包含一个View子类,它正在膨胀来自XML的布局。我将其导出到JAR中(右键单击项目->导出->滴答类和资源),并验证了类、XML资源和依赖JAR库都在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中,我在最后一个项目中使用JAR包名来使用这个类。
为了使事情变得更复杂,我有两个项目:一个包含导出JAR的Android库项目和一个使用JAR中的内容的项目。JAR库、包含JAR的库项目和使用JAR中内容的最终项目都有不同的包名。
如何找到布局的正确资源ID?
我应该使用哪个Context,以及哪个包名?我能否在JAR中设置这个包名,而不管它是从哪个库或项目引用的。
发布于 2014-06-30 11:39:04
我将其导出到JAR中(右键单击项目->导出->滴答类和资源),并验证了类、XML资源和依赖JAR库都在JAR中。
XML资源文件在那里将是无用的。Android不使用Java资源。
我甚至不确定依赖的JAR是否能工作,尽管我不排除这种可能性。
您需要将其视为其他项目所依赖的普通Android库项目,或者迁移到Gradle/Android,并将其打包为AAR (其中确实包含Android资源)。
或者,摆脱资源(例如,将布局代码转换为相应的Java代码)。
发布于 2014-06-30 11:53:51
不能将xml或可绘制资源打包到jar文件中,然后从另一个项目中使用它们。您面前有两个选项,1.只需使用一个普通的Android库项目,而不是jar文件2。转到基于gradle的build/Android,并为库创建一个*.aar文件。这是一个新类型,它包含库项目中的类和所有资源。
https://stackoverflow.com/questions/24489208
复制相似问题