这听起来简单,可能回答很简单。
我的SomeCustomView
课程延伸RelativeView
。这个SomeCustomView
有简单的addShapeInCustomView()
:
public class SomeCustomView extends RelativeLayout {
//constructor etc.
public void addShapeInCustomView(){
View testView = new View(ctx);
testView.setLayoutParams(new LayoutParams(50, viewHeight));
ViewHelper.setTranslationX(testView, 20);
testView.setBackgroundColor(Color.GREEN);
addView(testView);
invalidate();
}
}
当然我在我的xml布局中添加了这个:
<com.example.test.app.lib.SomeCustomView
android:id="@+id/someCustomView"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="5dp"
android:background="@color/darkblue">
然后在片段中我调用了addShapeInCustomView()
:
public View onCreateView(...){
//inflate etc.
someCustomView = (SomeCustomView) view.findViewById(R.id.someCustomView);
someCustomView.addShapeInCustomView();
}
SomeCustomView
正在正确创建。没有错误。但是来自addShapeInCustomView()
的testView不可见。
我做错了什么?如果我想在初始化后(以及onDraw())
之后添加一些元素怎么办?我应该在addShapeInCustomView()
的其他时刻调用Fragment
生命周期(经过测试,没有任何反应)?
如果我以200毫秒的延迟致电addShapeInCustomView()
,那就完美了。 someView显示出来。但显然这是一个奇怪的工作。
答案 0 :(得分:0)
您应该使用requestLayout()
代替invalidate()
。无效只是重绘当前布局,而requestLayout()
将重新测量和布局子视图,然后绘制它们。