1

私の質問は図でよりよく説明されていますが、一般的な考え方は次のとおりです。

レイアウトにボタンを動的に追加しています。ボタンは、ユーザー インタラクションを通じて追加されます。ボタンが1つある場合は、親の中央に配置したいと思います。

|...............[Button 1]...............|

2 つのボタンの場合、中央に並べて配置したいと思います。

|..........[Button 1][Button 2]..........|

このパターンは、特定の数のボタンまで続きます (すべてのボタンが同じ行/行に集中しないようにするため)。したがって、行/行あたりのボタンの最大数が 4 であるとしましょう。したがって、4 を超えるボタンの数については、次の行/行に均等に分割したいと思います。したがって、5 つのボタンの場合は次のようになります。

|.....[Button 1][Button 2][Button 3].....|
|..........[Button 4][Button 5]..........|

基本的に、プログラムでボタンを行/行にレイアウトして、各行にできるだけ同じ (またはほぼ同じ) 数のボタンが含まれるようにして、それらが均等に分散されるようにしたいと考えています。


現在、ボタンはグリッド形式で配置されており、呼び出されるまで見えませんが、見栄えが悪いです。したがって、次のようになります。

|[Button 1][Button 2]....................|

または、ボタンが 5 つある場合は、次のようになります。

|[Button 1][Button 2][Button 3][Button 4]|
|[Button 5]..............................|

これは醜い/粘着性があるように見えるので、最初のセクションで説明したように、プログラムでレイアウトする必要があります。


私が求めていることをすることは可能ですか?もしそうなら、どうすればそれを行うことができますか?

4

1 に答える 1

2

次のように実行できます。

1/このすべてのRelativeLayoutルートとしてa を使用します。ViewGroup

2/ のLinearLayout各行に を使用し、Buttonsこれを一意の ID を持つようにRelativeLayout.LayoutParams設定しWRAP_CONTENT、幅と高さを に設定します。ルールとして使用CENTER_HORIZONTALし、行を追加するとき (2 番目、3 番目、4 番目など、つまり 1 番目ではない) にルールを追加し、下BELOWにある必要がある行の id を使用します。

3/ Buttona が行の内側に収まるかどうかを判断するには、 を使用して行とRelativeLayout(ステップ 1 で)の幅を取得しgetMeasuredWidth()ます。それらを使用して、収まるかどうかを確認できますButton-固定幅を使用していると仮定します。

編集

例 (手順 3 は含まれません):

Activity に member variableViewGroup listを追加してから、Activity.onCreate() に追加します。

list = new RelativeLayout(this);
list.setLayoutParams(new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
setContentView(list);

ボタンを追加するメソッドを追加します。

private void addButton(String btnTitle)
{
    // find out how many rows we have in our relative layout  
    int rowCount = list.getChildCount();

    int buttonCount = MY_MAX_BUTTONS_PER_ROW;

    // find out how many buttons are in the last row
    if (rowCount > 0) buttonCount = ((ViewGroup)list.getChildAt(rowCount-1)).getChildCount();

    final ViewGroup row;

    // do we have no rows, or is there no room for another button?
    if (rowCount == 0 || buttonCount >= MY_MAX_BUTTONS_PER_ROW)
    {
        // create a row 
        LinearLayout newRow = new LinearLayout(this);
        newRow.setId(rowCount+1);
        RelativeLayout.LayoutParams rowLP = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
        rowLP.addRule(CENTER_HORIZONTAL);
        if (rowCount > 0) rowLP.addRule(BELOW, rowCount);

        list.addView(newRow, rowLP);

        rowCount++;  

        row = newRow;
    }
    // .. there's room, so add it to the last row
    else 
    {
        row = (ViewGroup)list.getChildAt(rowCount-1);
    }

    // create one of your buttons
    // ...

    button.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
    row.addView(button);
}
于 2013-02-14T07:38:22.213 に答える