自定义 View.动态 addView 不显示

2019-10-12 13:50:34 +08:00
 androidzhujiao
请教大家一个问题🙏
关于自定义 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 加进去了,但是就是没显示出来,请问出现这种情况可能的原因还有有哪些呢,迷惑中。
7541 次点击
所在节点    Android
1 条回复
winterbells
2019-10-12 14:06:55 +08:00
就直接在构造方法里 add
打断点看看
你的构造方法加 super 了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/608583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX