Android 奇怪的行为?自定义布局与常规布局
更好地显示图像,标准相对布局: 自定义相对布局: 它还阻止我向自定义布局添加其他小部件,我不知道为什么 这是我的自定义类的代码:Android 奇怪的行为?自定义布局与常规布局,android,layout,Android,Layout,更好地显示图像,标准相对布局: 自定义相对布局: 它还阻止我向自定义布局添加其他小部件,我不知道为什么 这是我的自定义类的代码: public class CustomLayout extends RelativeLayout { private Paint brush; public CustomLayout (Context context, AttributeSet attrs) { super(context, attrs); } @Override protected
public class CustomLayout extends RelativeLayout {
private Paint brush;
public CustomLayout (Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
init();
}
private void init() {
brush = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
brush.setColor(Color.BLACK);
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), brush);
}
}
那为什么这讨厌我?我必须指出,当应用程序启动时,所有内容都正确显示。但实际上,我无法使用设计器在自定义布局中添加小部件或定位对象。好吧,设计器不是运行时的,因此它绘制了您所拥有的内容的“近似”版本。如果有什么区别的话,这里很可能是过度绘制了很多内容,区别在于自定义布局的子级无效,并发出了重画,这会导致文本视图重新绘制其内容(因此,您在运行时看到它是ok的)。在设计器中,这种情况不太可能发生(或者只发生一次,但由于没有生命周期,TextView在一次通过后没有机会重新绘制自己) 覆盖您的
文本视图#onDraw()
,并添加一些日志记录,以查看您是否收到呼叫以及呼叫数量。我打赌会有一些
最后,请记住,设计器与运行时不同,否则使用起来会非常慢。还有一件事,我从版面中删除了TextView,但仍然无法通过设计器在空的自定义版面上添加小部件?您所说的“无法通过设计器在空的自定义版面上添加小部件”到底是什么意思?您有错误吗?当我选择一个小部件并尝试将其放置在布局中时,鼠标光标变为无法标记。我没有收到任何错误。