如何以编程方式添加到布局复合组件Android?

时间:2012-04-29 13:25:25

标签: android android-layout view custom-component

我创建了一个复合组件Box,我想将其添加到布局中。 Box xml:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayoutForBlock"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" android:background="@drawable/screen_background" android:layout_marginLeft="5dp" android:layout_marginTop="5dp">
        <ImageButton
            android:id="@+id/imageButtonContent"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:scaleType="fitCenter"
            android:src="@drawable/beach_bed" android:background="@drawable/buttonbackground" android:clickable="true" android:layout_margin="5dp" android:contentDescription="@string/sample_text"/>
        <TextView
            android:id="@+id/textViewContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/sample_text"
            android:textColor="@color/deep_blue" android:layout_margin="5dp"/>
    </LinearLayout>
</merge>

Box上课:

public class Box extends LinearLayout  {

    private TextView textContent;
    private ImageView imageContent;

    public Box(Context context, AttributeSet attrs) {
        super(context, attrs);
        ((Activity)getContext()).getLayoutInflater().inflate(R.layout.box, this);
        setupViewItems();
    }

    private void setupViewItems() {
        textContent = (TextView) findViewById(R.id.textViewContent);
        imageContent = (ImageView) findViewById(R.id.imageButtonContent);
    }

    public void setTextContent(String text) {
        this.textContent.setText(text);
    }
    public void setImageContent(String tag) {
        this.imageContent.setContentDescription(tag);
    }
}

如果我将Box添加到主xml文件中,一切正常,如:

<com.mypackage.alexey.Box
android:id="@+id/mybox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
/> 

问题在于我想以编程方式创建许多方框:Box mybox= new Box();。怎么做?

1 个答案:

答案 0 :(得分:9)

我建议你也实现只需要LinearLayout的{​​{1}}的构造函数:

Context

然后在public Box(Context context) { super(context); } 中,当您想要添加新的Activity时,实例化Box类并将其添加到您的布局中:

Box