在自定义视图中添加一些元素(在片段中)

时间:2014-07-10 05:19:10

标签: android android-custom-view

这听起来简单,可能回答很简单。

我的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显示出来。但显然这是一个奇怪的工作。

1 个答案:

答案 0 :(得分:0)

您应该使用requestLayout()代替invalidate()。无效只是重绘当前布局,而requestLayout()将重新测量和布局子视图,然后绘制它们。