2012-11-06 40 views
1

我想添加動態創建按鈕(GridView/LinearLayout/TableLayout)我不知道他們使用。 每個按鈕都有不同的寬度。這裏有一個例子就是我假裝去做:如何分配動態數組按鈕到佈局

演員:

[按鈕:李察基爾] [按鈕:唧唧歪歪喇嘛] [按鈕:中學 演員鮑勃]
[按鈕:裏卡多蒙託亞]

類型:

[按鈕:劇情] [按鈕:COMEDIA]

電影院:

[按鈕:天堂電影院] [按鈕:電影院2] [按鈕:電影院3]
[按鈕:Cinema 4] .... [按鈕:Cinema N]

我該如何分配他們dinamically? 預先感謝您。

+0

爲什麼你要自己做呢?只需使用layoutToRightOf,layoutBelow和width =「wrap_content」將它們放入RelativeLayouts。 – Simon

+0

不幸的是,如果要將文本和自動空間的長度包裝到行中,您可以查看自定義佈局。 GridView不起作用,(它的列基,所有東西都是相同的寬度)。表格佈局將是你最好的選擇,只需要編寫一些圍繞IF空間的邏輯添加到此行ELSE添加新行... –

+0

謝謝你的想法傢伙。問題解決了。 – ikermart

回答

2

如果你想以編程方式添加它們,你可以在一個向量線性佈局內使用水平線性佈局來保持你的按鈕。

這裏是一個示例代碼:

LinearLayout InitQuiteSomeButtons(Button[] butts,int buttonsPerRow) 
{ 

    LinearLayout vlay = new LinearLayout(this); 
    LinearLayout.LayoutParams vParams= new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    vlay.setLayoutParams(vParams); 
    vlay.setOrientation(LinearLayout.VERTICAL); 
    LinearLayout hLay=new LinearLayout(this); 
    LinearLayout.LayoutParams hParams= new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
    hLay.setLayoutParams(hParams); 
    hLay.setOrientation(LinearLayout.HORIZONTAL); 

    for (int i=0;i<butts.length;i++) 
    { 
     if (i>0 && i%buttonsPerRow==0) 
     { 
      vlay.addView(hLay); 
      hLay = new LinearLayout(this); 
      hLay.setLayoutParams(hParams); 
      hLay.setOrientation(LinearLayout.HORIZONTAL); 
     } 
     hLay.addView(butts[i]); 

    } 
    if (butts.length%buttonsPerRow==0) 
    { 
     //add the non-filledrow 
     vLay.addView(hLay); 
    } 
    return vlay; 
} 
+0

謝謝@MichaelCMS的片段。如果按鈕的寬度是動態的,由於按鈕的文本長度會發生什麼?你如何控制這個? – ikermart

+0

然後,您可以使用getWidth()函數來計算按鈕的大小,然後您可以根據插入的按鈕的寬度調整行上按鈕的數量。 所以環路變爲: ' 對(INT I = 0; I ROW_WIDTH) { //創建新的水平佈局 currentSpaceUsed = 0; } if(currentSpaceUsed> 0) //添加未填充的行 vLay.addView(hLay); } } ' – MichaelCMS

+0

謝謝!我剛剛實施,像魅力一樣工作。問題解決了。 – ikermart