如何在添加其他参数时实例化自定义视图?

时间:2013-05-13 03:19:27

标签: android android-canvas paint

我知道这可能是一个非常简单的答案,但我在这里有点难过。我正在使用以下构造函数创建自定义视图Panel

public Panel(Context context, AttributeSet attrs, int barLength){
    super(context, attrs);

    //paint object for drawing in onDraw
    barPaint = new Paint();
    bar = new Rect(3, 13, barLength, 3); // Rect object

    //...other stuff, etc etc

}

在将使用此视图的活动中,将在表格布局的不同单元格中创建五个不同的时间。 Panel是一个非常简单的Rect,其长度会因参数barLength而异。

因此,在实际创建Panel视图的活动中,它们的调用方式如下:

private Panel tagBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tagBar = (Panel) findViewById(R.id.custView);       
}

正如您所知,这不使用我上面概述的构造函数。如何实例化新的Panel,包括正确传递正确的ContextAttributeSet?现在似乎在构造时(没有int barLength作为参数)那些只是自动传入。如何tagBar实例化以正确传递所有三个参数?

为了澄清,attrs.xml是一个styleable属性文件,主要用于帮助设置xml中条形的颜色。任何人都可以给我任何指示吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果在xml中有面板类,框架会为您调用适当的构造函数,并将其传递给Context和Attributes。然后,您可以在attrs.xml中创建一个新属性,一旦完成,您也可以通过xml传递条形长度

<resources>
    <declare-styleable name="Panel">
        <attr name="barLength" format="int" />
    </declare-styleable>
</resources>

然后在xml中添加barLength = n,就像你在xml中的任何其他属性一样,但没有android:在它前面。