6

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 オプションが何もしないことを除いて、すべて正常に動作しています。GridLayoutこのサイトの他のソリューションで述べられているように、XMLファイルでlayout_widthを別のタイプに変更したり、重力を追加したりしてみました。注意すべきもう 1 つのことは、これを Fragment 内の Async タスクで行っていることです。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]);
        }
4

1 に答える 1

5

Karan Mer が言ったように、GridLayout.LayoutParams で Layout Gravity を設定します。

ただし、注意してください。Gridlayout では、前に子 (この場合はボタン) の columnSpec / rowSpec を設定する必要があります。

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 を使用しています)

于 2014-07-31T13:08:14.453 に答える