请教大家一个问题🙏
关于自定义 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 加进去了,但是就是没显示出来,请问出现这种情况可能的原因还有有哪些呢,迷惑中。