在我的Android应用程序中,我有一个自定义视图(来自ViewGroup的派生视图),以编程方式添加到了我的活动中。
rlParent.addView(myCustomView, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
我正在将layoutParameters设置为WRAP_CONTENT。仍然我的应用程序看起来像这样:
我在自定义视图中添加了红色背景,因此可以看到需要多少空间。难道不应该只占用所需的空间,所以右边的大红线不应该存在吗?
图块也是自定义视图,我已通过编程方式添加。我想做的是将自定义视图居中,因此左侧和右侧的空间相同。
代码(我已经用Java完成了所有操作,而没有使用XML完成):
我在构造函数中调用此方法。它将所有FieldViews添加到自定义视图。 (FieldView是从RelativeLayout派生的自定义视图,它只是屏幕上的一个图块。)
private void fill() {
for (int r = 0; r < 10; r++) {
for (int c = 0; c < 10; c++) {
FieldView fieldView = new FieldView(getContext(), r, c);
mFieldViews.add(fieldView);
addView(fieldView);
}
}
}
这是我设置FieldView位置的地方
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
int dimension = 10;
int interval = Math.min(getMeasuredWidth(), getMeasuredHeight()) / dimension;
for (int i = 0; i < childCount; i++) {
FieldView fieldView = (FieldView) getChildAt(i);
int top = (i / dimension) * interval;
int bottom = top + interval;
int left = (i % dimension) * interval;
int right = left + interval;
fieldView.layout(left, top, right, bottom);
}
}
几乎可以显示所有代码...