使用默认布局参数的XML自定义复合视图

时间:2013-06-28 03:15:08

标签: android android-layout viewgroup

好的,所以我正在尝试创建一些可重用的组件。基本上,我们有一个复合布局,包括:

- 标题
- 说明
- (任意数量的控制)
- 页脚

所以我有一个自定义的ViewGroup,它自动处理页眉和页脚的添加,以及文本和其他变量的自定义属性。

这一切都很好,但我正在尝试这样做,以便我可以在XML中指定控件视图(具有非常特定的布局),如下所示:

<com.mypackage.CustomLayout
    ///...
    >
    <com.mypackage.CustomControl
        //attributes
        />
    <com.mypackage.CustomControl2
        //attributes
        />
    <com.mypackage.CustomControl3
        //attributes
        />
</com.mypackage.CustomLayout>

对于我的自定义控件,它们都遵循以下一般模式:

布局XML示例

<merge
    android:layout_width="match_parent"
    android:layout_height="100dp"
     //Attributes
    >
    <OtherView/>
    <OtherView/>
</merge>

对应的控制视图

public class ControlView extends LinearLayout {
    public ControlView (Context context) {
        super(context);
        init();
    }

    public ControlView (Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        parseAttributes(attrs);
    }

    public ControlView (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
        parseAttributes(attrs);
    }

    private void init () {
        LayoutInflater i = LayoutInflater.from(getContext());
        i.inflate(R.layout.example_layout, this);
        //Initialize subviews
    }
}

问题是merge标签中的参数被忽略了,我需要为每个自定义控件添加layout_widthlayout_height参数,而不是使用合并中定义的布局参数标签。

如果我尝试在init()方法中设置LayoutParams,我仍然会收到运行时异常,说明需要layout_widthlayout_height属性。

有没有更好的方法来做我正在做的事情?我想为自定义控件的任何实例提供预设LayoutParams,无论XML中提供了哪些参数(如果有)。

0 个答案:

没有答案