我知道这可能是一个非常简单的答案,但我在这里有点难过。我正在使用以下构造函数创建自定义视图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
,包括正确传递正确的Context
和AttributeSet
?现在似乎在构造时(没有int barLength
作为参数)那些只是自动传入。如何tagBar
实例化以正确传递所有三个参数?
为了澄清,attrs.xml是一个styleable
属性文件,主要用于帮助设置xml中条形的颜色。任何人都可以给我任何指示吗?
谢谢!
答案 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:在它前面。