View
s раздуты из макета - как ваш пример TextView
- не добавляются к их родительскому ViewGroup
с addView(View child)
, поэтому переопределение этого метода не работает для вас. Вы хотите переопределить addView(View child, int index, ViewGroup.LayoutParams params)
, в результате чего все остальные addView()
перегрузки заканчиваются вызовом.
В этом методе проверьте, является ли добавленный ребенок одним из двух специальных FrameLayout
s. Если это так, пусть класс super
обрабатывает добавление. В противном случае добавьте дочерний элемент в ваш контейнер FrameLayout
.
public class CustomFrameLayout extends FrameLayout {
private final FrameLayout topLayout;
private final FrameLayout containerLayout;
...
public CustomFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.custom, this, true);
topLayout = (FrameLayout) findViewById(R.id.frame_layout_top);
containerLayout = (FrameLayout) findViewById(R.id.frame_layout_child_container);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
final int id = child.getId();
if (id == R.id.frame_layout_top || id == R.id.frame_layout_child_container) {
super.addView(child, index, params);
}
else {
containerLayout.addView(child, index, params);
}
}
}