如何以编程方式为LinearLayout创建背景

时间:2013-05-20 21:48:09

标签: android

我有一个LinearLayout,我想以编程方式设置背景。这个背景应该非常简单,只有两个矩形彼此相邻。矩形的宽度仅在运行时已知。什么是最好的方式?

    ShapeDrawable done = new ShapeDrawable(new RectShape());
    done.setBounds(new Rect(0, 0, 0, 0));
    done.getPaint().setColor(Color.GREEN);

    ShapeDrawable remaining = new ShapeDrawable(new RectShape());
    remaining.setBounds(new Rect(20, 0, 0, 0));
    remaining.getPaint().setColor(Color.RED);

    LayerDrawable composite = new LayerDrawable(new Drawable[]{remaining, done});
    weightRow.setBackgroundDrawable(composite); 

我试图像这样创建一个复合drawable,我希望剩余的矩形从位置20开始,但它只是填充整个布局。

2 个答案:

答案 0 :(得分:1)

我会回答我自己的问题。在阅读了更多帖子之后,我意识到,模拟android:top,left,...来自xml drawable,你应该使用LayerDrawable的setLayerInset(int index,int l,int t,int r,int b)你要转移的层。

ShapeDrawable done = new ShapeDrawable();
done.getPaint().setColor(Color.GREEN);

ShapeDrawable remaining = new ShapeDrawable(new RectShape());
remaining.getPaint().setColor(Color.RED);

LayerDrawable composite = new LayerDrawable(new Drawable[]{done, remaining});
composite.setLayerInset(1, 0, 0, 100, 0);

layout.setBackgroundDrawable(composite);

答案 1 :(得分:0)

您可以创建一个扩展ShapeDrawable的自定义类。实现onDraw()方法来定义它应该如何绘制自己;您无法使用CanvasPaint API以编程方式绘制矩形区域。然后,您可以定义一种方法,以便在运行时设置这些区域的宽度。

Activity中,制作此课程的新实例,并在setBackgroundDrawable()上致电LinearLayout