Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 奇怪的行为?自定义布局与常规布局_Android_Layout - Fatal编程技术网

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,但仍然无法通过设计器在空的自定义版面上添加小部件?您所说的“无法通过设计器在空的自定义版面上添加小部件”到底是什么意思?您有错误吗?当我选择一个小部件并尝试将其放置在布局中时,鼠标光标变为无法标记。我没有收到任何错误。