在Relativelayout中为不同的布局添加视图,这会扩展xml

时间:2016-11-22 14:18:37

标签: android xml android-layout layout

我正在尝试创建一个自定义视图,该视图将替换/膨胀包含多个线性布局预定义的特定布局,并将这些视图添加到每个预定义布局中。

我的预定义布局在relativelayout中包含4个linearlayout作为父级,并在类中扩展此xml,其中它扩展了Relativelayout并初始化视图,如下所示。

private void initView(Context context) {
    //Inflate and attach your child XML
    View.inflate(context, R.layout.layout_empty_views, this);
    llTop = (LinearLayout) findViewById(R.id.linearLayout);
    llLeft = (LinearLayout) findViewById(R.id.linearLayout2);
    llBottom = (LinearLayout) findViewById(R.id.linearLayout3);
    llRight = (LinearLayout) findViewById(R.id.linearLayout4);
}

现在生病接受了12个孩子的观点,需要在每个线性布局中添加3个孩子,这就是我现在陷入困境的地方。在addView函数中,由于索引而无法分割视图,因此始终为-1。

@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
    if (llTop == null) {
        super.addView(child, index, params);
    } else {
        //Forward these calls to the content view
        llTop.addView(child, index, params);
    }
}

在onLayout函数中,由于我的预定义布局膨胀,getChildCount被提升了12个以上。

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    //super.onLayout(changed, l, t, r, b);
    // TODO Auto-generated method stub

    Log.v("Count::", String.valueOf(getChildCount()));
    /*for (int i = 0; i < getChildCount(); i++) {
        View v = getChildAt(i);
        removeViewAt(i);
        //llTop.addView(v);
        if (i < 3) {
            llTop.addView(v);
        } else if (i > 2 && i < 6) {
            llRight.addView(v);
        } else if (i > 5 && i < 9) {
            llBottom.addView(v);
        } else if (i > 9) {
            llLeft.addView(v);
        }
    }*/
}

1 个答案:

答案 0 :(得分:0)

当在addView(View child, int index)中收到索引-1时,这意味着它应该被添加到ViewGroup的末尾。

我不确定我是否完全理解您对此视图的意图,您可能不需要自定义视图。但是,我可以告诉您,您不应该在onLayout函数中添加视图。此函数是View应该调整其子项的大小和位置的位置。

查看creating custom views上的Android开发者指南。