如何将Android XML布局转换为Java类?

时间:2013-04-23 23:44:29

标签: java android android-layout

这是我正在尝试做的事情:

我想创建一个包含在包含视图和图片的Android应用中的JAR。据我所知,您无法将res文件夹打包在JAR中。所以我要做的是将我的res文件夹中的XML文件转换为Android视图类,然后我可以将其作为项目的一部分编译到JAR中。

是否有成功完成此任务的工具或项目?也欢迎替代解决方案。

3 个答案:

答案 0 :(得分:1)

您可以动态地创建其中的每个视图并设置适当的设置 - xml中的每个设置都有一个匹配的Java调用要更改。除了布局文件夹之外,这并没有解决任何问题。将代码作为Android库项目提供给他们要容易得多。

答案 1 :(得分:0)

这样做:

public class MyView extends View{
    private TextView tv; //or other elements in the layout you want
    //here also has constructors
    @Override
    public void onDraw(Canvas canvas){
        //draw the views that you prepared in your constructor
    }
}

如果你扩展LinearLayout,它将是XML中的LinearLayout,扩展RelativeLayout然后是RelativeLayout等。所有这些布局都是View的子类。

答案 2 :(得分:0)

我遇到了这个问题:想要将我的库分发为jar文件。只是不熟悉图书馆项目的人员引起了一些合理的支持问题(让我感到震惊,但是我要争辩)。

首先,实际上不支持从XML布局自动生成java类。我想我也许可以提取ADT使用的源代码来将你的XML布局渲染成单独的类,但是经过几个小时的讨论,我放弃了并手工编写了布局。使它们扩展RelativeLayout并在代码中构建层次结构。工作,但不是很大规模。在某些时候,可能需要深入了解ADT源以允许您导出布局。

对于图像,我将其限制为仅图标,然后编写了一个丑陋的小工具,可以从PNG文件生成byte[]数组,然后将其作为静态最终变量添加到每个图像的单独类中:仅限于小图片,我认为不到40k或Android构建过程的某些未知部分会因为生成的类文件太大而崩溃。完成后,我可以使用以下代码重构视图类中的图像:

audio_icon = new BitmapDrawable(BitmapFactory.decodeByteArray(AudioIcon.bytes, 0, AudioIcon.bytes.length));

我有一个所有图标的包,它实际上工作得很好。您确实放弃了库格式提供的自定义选项,但它使我们的集成过程非常简单。