我通过扩展ViewGroup提出了一个定制的观点,我的问题是:
将子视图(addView(chileView))视图添加到ViewGroup时,如果子视图是膨胀视图,则子视图将不会显示。但是当子视图是硬编码视图(比如,btn = new Button(ctx))时,它会显示!
守则,未显示:
public class EdgeSwiper extends ViewGroup{
public EdgeSwiper(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public EdgeSwiper(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public EdgeSwiper(Context context) {
super(context);
init(context);
}
View v;
private void init(Context context) {
v = View.inflate(context,R.layout.aview,null);
this.addView(v);
}
@Override
protected void onLayout(boolean arg0, int a, int b, int c, int d) {
v.layout(a, b, c, d);
}
}
答案 0 :(得分:1)
在精神上经历了我能想到的一切之后,我创建了一个与此相同的虚拟项目来检查几种可能性。出于某种原因,让ViewChanger从FrameLayout而不是ViewGroup扩展使得这项工作 - 很可能是因为ViewGroup缺少渲染它的chidl视图所需的东西(我试图重写onDraw,但它仍然无效)。由于您一次只显示一个视图 - 通常使用FrameLayout - 我建议只进行此更改;它比在ViewGroup中隔离和修复丢失的绘图功能要容易得多。
public class EdgeSwiper extends FrameLayout {
应该是您需要进行的唯一更改才能使原始设计(从构造函数中添加视图)正常工作。