GridGayout的SetGravity无法正常工作

RaW*_*aWa 6 android gravity grid-layout android-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>
Run Code Online (Sandbox Code Playgroud)

我正在使用这个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]);
        }
Run Code Online (Sandbox Code Playgroud)

小智 5

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

但要小心,在 Gridlayout 中,您必须先设置子项的 columnSpec / rowSpec(在您的情况下为 Button):

param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);
Run Code Online (Sandbox Code Playgroud)

然后才

param.setGravity(Gravity.RIGHT);
Run Code Online (Sandbox Code Playgroud)

如果在执行 setGravity 时 columnSpec / rowSpec 未定义,则重力不起作用...

即使你这样做:

param.setGravity(Gravity.RIGHT);
param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);
Run Code Online (Sandbox Code Playgroud)

重力不起作用...

正确的方法是:

param.columnSpec = GridLayout.spec(0);
param.rowSpec = GridLayout.spec(0);
param.setGravity(Gravity.RIGHT);
Run Code Online (Sandbox Code Playgroud)

不知道是bug还是故意的。(我使用的是 Android API 19)