2014-01-25 200 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); 
}