首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Android

自定义 View.动态 addView 不显示

  •  
  •   androidzhujiao · 59 天前 · 1000 次点击
    这是一个创建于 59 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大家一个问题🙏
    关于自定义 View 时不显示:
    自定义 View,在初始化的时候用代码动态生成并 addView,问题在 generateView 这个方法,返回的 View 类型不同,导致 addview 之后不显示。

    Class MyView extends ViewGroup{

    public MyView(Context context) {
    addView(generateView(android.R.color.holo_green_dark));
    addView(generateView(android.R.color.holo_blue_bright));
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    measureChildren(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    Log.e("onLayout","getChildCount == "+getChildCount());
    int childCount = getChildCount();
    for (int i = 0; i < childCount; i++) {
    getChildAt(i).layout(l, t, r, b);
    }
    }

    private ? generateView(int color) {
    ……
    return ?;
    }

    }

    测试过程,一开始我就直接 new 的 View,结果没显示出来,我猜应该是 onlayout,onMeasure 没实现,看了下源码 View 的 onLayout 是空实现,onMeasure 是实现了的。
    private View generateView(int color) {
    View view = new View(mContext);
    view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
    view.setBackgroundColor(color);
    return view;
    }

    然后我又将 View 改成 RelativeLayout,它的 onMeasure 和 onLayout 是实现了的,但是还是没能显示出来。

    最后将这个返回的 view 类型改成了 TextView,就能显示出来

    然后我怀疑是设置参数的时机问题,试了下在 addview 之后再设置 layoutparams,但还是不显示。

    观察了 layoutinterceptor,发现 view 加进去了,但是就是没显示出来,请问出现这种情况可能的原因还有有哪些呢,迷惑中。
    1 回复  |  直到 2019-10-12 14:06:55 +08:00
        1
    winterbells   59 天前 via Android
    就直接在构造方法里 add
    打断点看看
    你的构造方法加 super 了吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2746 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 13:06 · PVG 21:06 · LAX 05:06 · JFK 08:06
    ♥ Do have faith in what you're doing.