Android 视图将填充所有可用空间

Android 视图将填充所有可用空间,android,android-gridlayout,Android,Android Gridlayout,我试图以编程方式使用GridLayout 这是我的密码: GridLayout p = new GridLayout(this); p.setRowCount(20); p.setColumnCount(20); View c = new View(this); c.setBackgroundColor(this.getResources().getColor(R.color.darkbluetheme)); Spec specusata = an

我试图以编程方式使用
GridLayout

这是我的密码:

    GridLayout p = new GridLayout(this);
    p.setRowCount(20);
    p.setColumnCount(20);
    View c = new View(this);
    c.setBackgroundColor(this.getResources().getColor(R.color.darkbluetheme));
    Spec specusata = android.support.v7.widget.GridLayout.spec(1,2);
    Spec specusata2 = android.support.v7.widget.GridLayout.spec(1,2);
    p.addView(c,new LayoutParams(specusata,specusata2));
    setContentView(p);
以下是我得到的结果:

当我期待这样的事情时:

请问我做错了什么???

谢谢

编辑编辑编辑

即使我将视图的LayoutParams设置为WRAP_内容,也会发生这种情况:

    GridLayout p = new GridLayout(this);
    p.setRowCount(20);
    p.setColumnCount(20);
    View c = new View(DayActivity.this);
    c.setBackgroundColor(this.getResources().getColor(R.color.darkbluetheme));
    Spec specusata = android.support.v7.widget.GridLayout.spec(1);
    Spec specusata2 = android.support.v7.widget.GridLayout.spec(1);
    c.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    p.addView(c,new android.support.v7.widget.GridLayout.LayoutParams(specusata,specusata2));
    setContentView(p);

IMHO:您的其他行和列为空,因此宽度为零。你剩下的空间都被那一个单元格填满了,占据了所有的空间


尝试添加更多具有其他颜色的子视图,然后您就会了解发生了什么。

IMHO:您的其他行和列为空,因此宽度为零。你剩下的空间都被那一个单元格填满了,占据了所有的空间


尝试添加更多具有其他颜色的子视图,然后您将了解发生了什么。

@Hardy嗨,Hardy,我不确定我是否了解。我想我在执行
p.addView(c,newlayoutparams(specusata,specusata2))
时设置了必要的布局参数。。。请你给我解释清楚一点好吗?谢谢LISAthis的意思是视图是全屏显示的。@Piyus Gupta谢谢Piyus,你能举个例子吗,我还是不明白……也许我很愚蠢……:-(谢谢!LISA@LisaAnne是的..我一定会帮你..为什么不?嘿,丽莎..你检查过这个例子吗?@Hardy嗨,Hardy,我不确定我是否理解。我想我在执行
p.addView(c,new LayoutParams(specusata,specusata2))时设置了必要的布局参数
…请你给我解释清楚一点好吗?谢谢!LISAthis这意味着视图是全屏显示的。@Piyus Gupta谢谢Piyus,你能举个例子吗,我还是不明白…也许我很愚蠢…:-(谢谢!LISA@LisaAnne耶..我一定会帮你..为什么不..嘿,丽莎..你检查过这个例子了吗?谢谢雨果。这很有趣…我添加了另一个红色视图
b.setBackgroundColor(Color.Red);specusata=android.support.v7.widget.GridLayout.spec(5);specusata2=android.support.v7.widget.GridLayout.spec(5);b.setlayoututparams(新的LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));p.addView(b,新的android.support.v7.widget.GridLayout.LayoutParams(specusata,specusata2));
现在我得到了一个全屏红色!!!:-(如果视图没有强制大小为大小的内容,则在与WRAP_内容一起使用时会出现异常行为,因为没有内容。强制最小大小,或者将某些包含内容的子视图放入其中。请记住:布局只与对齐有关,而与大小无关。您认为网格布局将获得大小均匀的行或列的假设是错误的。它只会强制t第2行第1列中的项目将与第1列第5行中的项目具有相同的左侧位置。谢谢Hugo。这很有趣……我添加了另一个红色视图
b.setBackgroundColor(Color.Red);specusata=android.support.v7.widget.GridLayout.spec(5);specusata2=android.support.v7.widget.GridLayout.spec(5);b.setlayoututparams(新的LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));p.addView(b,新的android.support.v7.widget.GridLayout.LayoutParams(specusata,specusata2));
现在我得到了一个全屏红色!!!:-(如果视图没有强制大小为大小的内容,则在与WRAP_内容一起使用时会出现异常行为,因为没有内容。强制最小大小,或者将某些包含内容的子视图放入其中。请记住:布局只与对齐有关,而与大小无关。您认为网格布局将获得大小均匀的行或列的假设是错误的。它只会强制t第2行第1列中的项目将与第1列第5行中的项目具有相同的左侧位置。