我正在尝试创建一个自定义视图,该视图将替换/膨胀包含多个线性布局预定义的特定布局,并将这些视图添加到每个预定义布局中。
我的预定义布局在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);
}
}*/
}
答案 0 :(得分:0)
当在addView(View child, int index)中收到索引-1时,这意味着它应该被添加到ViewGroup的末尾。
我不确定我是否完全理解您对此视图的意图,您可能不需要自定义视图。但是,我可以告诉您,您不应该在onLayout函数中添加视图。此函数是View应该调整其子项的大小和位置的位置。
查看creating custom views上的Android开发者指南。