2014-01-25 242 views
4

我想按照按鈕和屏幕寬度動態地添加按鈕到相對佈局,如圖所示。按鈕數量不固定,按鈕寬度取決於設置到按鈕的文本。 enter image description here將按鈕添加到相對佈局動態或擴展線性佈局android

我試圖使用下面的代碼來實現這一點,但不能按我的要求正常工作。 任何人都可以幫我嗎?請幫助我解決這個問題。

RelativeLayout layout = (RelativeLayout) findViewById(R.id.genre_layout); 
        for(int i=0; i < genreList.size(); i++){ 

         Button btn = new Button(MovieDetailsActivity.this); 

         btn.setText(genreList.get(i).getGenreName()); 
         btn.setPadding(15, 5, 15, 5); 
         btn.setBackgroundColor(Color.parseColor("#FFFFFF")); 
         btn.setBackgroundColor(Color.parseColor("#80333333")); 


         LayoutParams param = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
         param.setMargins(5, 5, 5, 5); 

         if (i != 0){ 

          int prevId = genreList.get(i).getGenreId(); 
          param.addRule(RelativeLayout.RIGHT_OF, prevId); 
         } 
         btn.setLayoutParams(param); 
         btn.setId(genreList.get(i).getGenreId()); 

         layout.addView(btn); 

        } 
+2

使用flowlayout 4 android – pskink

回答

0

我用的FlowLayout,解決我的問題添加動態按鈕。 示例代碼和參考可用here 其易於使用。謝謝大家的幫助。

0

試試這個

Display display=getWindowManager().getDefaultDisplay(); 
    int width=display.getWidth(); 
    btn.setWidth(width); 

,或者如果你有兩個按鈕,做

Display display=getWindowManager().getDefaultDisplay(); 
    int width=display.getWidth(); 
    btn1.setWidth(width/2); 
    btn2.seTwidth(width/2); 

更新

LinearLayout.LayoutParams paramz = new LinearLayout.LayoutParams(
          LayoutParams.MATCH_PARENT, 
          0dp, 1.0f); 

然後btn.setLayoutParams(paramz);

+0

我將擁有多少個按鈕不是固定的。 – AndyN

+0

檢查我更新的答案。 –

0

我想建議您使用LinearLayout按照您在問題中提出的問題並給出Weight

LinearLayout

0

試試這個在RelativeLayout的

RelativeLayout layout = (RelativeLayout)findViewById(R.id.slidingDrawerContent); 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 


for (int i=0; i<4; i++) { 
    Button btn = new Button(this); 
    btn.setId(i); 
    btn.setText("some_text"); 

    // lp.addRule(RelativeLayout.RIGHT_OF, <Id>); 

    layout.addView(tv2, lp); 
}