Xml布局到Java代码生成器

时间:2013-08-18 20:57:26

标签: android layout code-generation xml-layout

是否有人知道从xml布局文件创建Java代码的工具。

快速创建我希望包含在活动布局中的自定义视图(我不想创建单独的库项目)会很有用。

因此,假设我的自定义视图是具有一些子视图的相对布局。

如果该工具可以从这样的布局文件生成,那将是很好的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- some child Views -->

</RelativeLayout>

像这样的java类:

class CustomView extends RelativeLayout{

    /*
     * Generate all the Layout Params and child Views for me
     */
}

最后,我可以在普通的XML中使用这个生成的类

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

    <TextView 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    text="Hello World" />


    <com.example.CustomView
    android:layout_width="match_parent"
    android:layout_height="100dp" 
    />

</LinearLayout>

这样的工具是否存在?

2 个答案:

答案 0 :(得分:2)

不,因为有两种更好的方法可以做到。

1)使用<include>标签。这允许您包含第二个xml文件。

2)使用自定义类,但让它在其构造函数中膨胀第二个xml。这样,您可以将该布局保留在类的xml中。

如果我想创建一次性设置/更改多个值的自定义功能,通常我会使用2,如果我只想将我的xml文件拆分成块,则使用1。

答案 1 :(得分:2)

  

快速创建自定义视图(我不想这样做)会很有用   创建一个单独的库项目,我想包含在   活动布局。

你已经可以做到了。创建自定义视图类并在那里扩展自定义布局。

package com.example.view;
class CustomView extends LinearLayout {
    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        LayoutInflater.from(context).inflate(R.layout.custom_view, this, true);
    }
}

使用<merge>标记作为根,为该自定义视图类创建布局。 Android会将标记内容添加到您的自定义视图类中,实际上,在我们的情况下为LinearLayout

// custom_view.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android"

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        text="Hello World" />

</merge>

你完成了。现在,您可以将此自定义类添加到布局中。

<com.example.view.CustomView
        android:id="@id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        />