【问题标题】:Android: inflated view do not show in customed ViewGroupAndroid:自定义视图组中不显示膨胀视图
【发布时间】:2013-04-27 19:48:50
【问题描述】:

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

【问题讨论】:

  • 您能发布一些您遇到问题的代码吗?

标签: android android-custom-view viewgroup inflate


【解决方案1】:

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

    public class EdgeSwiper extends FrameLayout {

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多