Android:膨胀的视图不会显示在自定义的ViewGroup中

时间:2013-04-27 19:48:50

标签: android android-custom-view viewgroup inflate

我通过扩展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);
    }
}

1 个答案:

答案 0 :(得分:1)

在精神上经历了我能想到的一切之后,我创建了一个与此相同的虚拟项目来检查几种可能性。出于某种原因,让ViewChanger从FrameLayout而不是ViewGroup扩展使得这项工作 - 很可能是因为ViewGroup缺少渲染它的chidl视图所需的东西(我试图重写onDraw,但它仍然无效)。由于您一次只显示一个视图 - 通常使用FrameLayout - 我建议只进行此更改;它比在ViewGroup中隔离和修复丢失的绘图功能要容易得多。

    public class EdgeSwiper extends FrameLayout {

应该是您需要进行的唯一更改才能使原始设计(从构造函数中添加视图)正常工作。