0

我知道这可能是一个非常简单的答案,但我在这里有点难过。我正在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 设置条的颜色。任何人都可以给我任何方向吗?

谢谢!

4

1 回答 1

0

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

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

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

于 2013-05-13T04:04:53.597 回答