0

いくつかのボタンで構成される Android で動的にレイアウトを作成したいと考えています。しかし、このレイアウトを動的に作成する方法が見つかりません。

これが私のレイアウトです:

動的レイアウト

デバイスの幅を完全に埋めた後、ボタンを次の行に配置したい。ボタンの総数は変更できます。これを動的に行う方法はありますか?

更新: あなたの提案に従って、私はこのコードを使用しています:

private void addQuestionPallete() {
        int tempBtn = 30;
        LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.1f);
        LayoutParams param2 = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1f);

        linearContent.setWeightSum(1f);
        linearContent.setOrientation(LinearLayout.VERTICAL);
        btnQuestionPalete = new Button[10];

        for (int j = 0; j < tempBtn / 10; j++) {
            linearQuestionPalettesRow = new LinearLayout(mContext);
            linearQuestionPalettesRow.setOrientation(LinearLayout.HORIZONTAL);
            linearQuestionPalettesRow.setLayoutParams(param2);
            for (int i = 0; i < 10; i++) {
                btnQuestionPalete[i] = new Button(mContext);
                btnQuestionPalete[i].setLayoutParams(param);
                btnQuestionPalete[i].setTextColor(Color.BLACK);
                btnQuestionPalete[i].setText("5");
                btnQuestionPalete[i].setId(fChexkBoxID++);
                linearQuestionPalettesRow.addView(btnQuestionPalete[i]);
            }
        }
        linearContent.addView(linearQuestionPalettesRow);
    }

しかし、ボタンの1行しか表示されません。どこが間違っていますか?

アップデート :

OK私は私の問題を解決しました。forループからレイアウトを追加していました。したがって、レイアウトは一度だけ追加されます。

4

3 に答える 3

2
  • 垂直線形レイアウトに水平線形レイアウトを追加します。
  • 水平線形レイアウトの「重みの合計」を1に設定します。
  • ボタンを追加する前に、各ボタンの重みを0.1に設定します
  • 1から開始して追加されたボタンの数のカウンターを保持し、10に達したら、別の水平線形レイアウトを追加します。

ボタンの重さを好きなように変更して、ボタンを大きくしたり小さくしたりして、それに応じて動作するようにカウンターを調整できます。

たとえば、各ボタンに重み= 0.2を割り当てることにした場合、カウンターは5(1 / 0.2 = 5)までカウントする必要があります。各行に必要なボタンの数に応じて、重みを0.05または0.025などに設定することもできます。

このように、weightプロパティは任意の画面サイズでビューを調整するため、さまざまな画面サイズについて心配する必要はありません。

于 2012-08-03T11:19:30.953 に答える
1
  1. 垂直線形レイアウトを作成する
  2. 水平リニア レイアウトを垂直リニア レイアウトに追加する
  3. addView次に、メソッドを使用して水平線形レイアウトにボタンを追加します
  4. ボタンのカウントを保持し、ステップ 2 からの最大繰り返しに達したとき
于 2012-08-03T10:59:11.080 に答える
1

システムがオブジェクトを画面に配置する方法をより詳細に制御したい場合は、カスタム レイアウトを実装することをお勧めします。

ViewGroup を拡張してメソッドをオーバーライドするクラスを作成する必要があります。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4)

このメソッドでは、オブジェクトを画面に配置する方法を記述します。たとえば、オブジェクトのサイズがすべて同じ場合、左側からの距離と上部からの距離を次のように計算できます。

int left = pinImg.getCol() * dotSize + dotSize ;
int top = pinImg.getRow()  * dotSize + dotSize ;

この場合、pinImg は配置するオブジェクトです。

あなたが持っていたあなたのレイアウトを記述するあなたのxmlで

<package.CustomView
     android:id="@+id/pinsTable"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"    

    />

この助けを願っています。

于 2012-08-03T11:27:43.747 に答える