GridGayout的SetGravity无法正常工作

时间:2013-01-21 09:16:25

标签: android android-layout gravity grid-layout

我正在使用一个简单的GridLayout我正在动态添加按钮。

<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/tagGridLayout"
android:background="@color/white"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:columnCount="3"
>
</GridLayout>

我正在使用这个Java代码来填充我的网格,除了设置的Gravity选项不做任何事情之外,所有工作都正常。我已经尝试过 - 将layout_width更改为XML文件中的不同类型,将重力添加到GridLayout等,如本网站上其他解决方案中所述。另一件需要注意的事情是我在片段中的异步任务中执行此操作。基本上我想实现layout_gravity="fill_horizontal"在XML中实现的目标。

tagButtons = new Button[trendingTagsCount];
        for(int i=0;i<trendingTagsCount;i++)
        {
            tagButtons[i] = new Button(getActivity());
            //tagButtons[i].setLayoutParams(new LayoutParams(Gravity.FILL_HORIZONTAL));
            tagButtons[i].setText(getTagsList.get(i).tag);
            tagButtons[i].setGravity(Gravity.FILL_HORIZONTAL);
            tagButtonGrid.addView(tagButtons[i]);
        }

1 个答案:

答案 0 :(得分:4)

正如Karan Mer所说,你用GridLayout.LayoutParams设置布局重力。

但是要小心,在Gridlayout中你必须在之前设置Children的columnSpec / rowSpec(在你的情况下是Button):

param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);

然后才

param.setGravity(Gravity.RIGHT);

如果在执行setGravity时columnSpec / rowSpec为UNDEFINED,则重力不起作用......

即使你这样做:

param.setGravity(Gravity.RIGHT);
param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);

重力不起作用......

正确的方法是:

param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);
param.setGravity(Gravity.RIGHT);

我不知道这是一个错误还是一个故意的事情。 (我使用的是Android API 19)