1

有谁知道从 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>

这样的工具存在吗?

4

2 回答 2

2

不,因为有 2 种更好的方法可以做到这一点。

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

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

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

于 2013-08-18T21:06:38.537 回答
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"
        />
于 2013-08-18T21:19:56.273 回答