为什么我的ViewGroup不收听wrap_content?

时间:2019-02-17 18:36:43

标签: java android view

在我的Android应用程序中,我有一个自定义视图(来自ViewGroup的派生视图),以编程方式添加到了我的活动中。

rlParent.addView(myCustomView, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

我正在将layoutParameters设置为WRAP_CONTENT。仍然我的应用程序看起来像这样:

Go to screenshot

我在自定义视图中添加了红色背景,因此可以看到需要多少空间。难道不应该只占用所需的空间,所以右边的大红线不应该存在吗?

图块也是自定义视图,我已通过编程方式添加。我想做的是将自定义视图居中,因此左侧和右侧的空间相同。

代码(我已经用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);
    }
}

几乎可以显示所有代码...

0 个答案:

没有答案