1

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

1 回答 1

1

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

    public class EdgeSwiper extends FrameLayout {

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

于 2013-05-29T09:14:24.893 回答