2012-08-03 156 views
0

我想在android中动态创建一个包含一些按钮的布局。但我无法找到任何动态创建此布局的方法。Android:如何动态创建此布局?

这里是我的布局:

Dynamic Layout

我想把按钮进入下一行后,他们在设备的宽度完全充满。按钮的总数可以变化。 有什么办法可以动态地做到这一点?

UPDATE: 按你的建议我使用这个代码:

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); 
    } 

但其只显示按钮的单行。我在哪里做错了?

UPDATE:

OK我已经解决了我的问题。我正在为for循环添加布局。因此布局只增加一次。

+0

是你最近尝试过什么?否则取按钮并添加水平线性布局。 – 2012-08-03 10:58:36

+0

我试图添加水平线性布局,但如何在达到屏幕的最大宽度后将它们放入下一行? – 2012-08-03 11:00:24

回答

2
  • 添加水平线性布局在一个垂直线性布局最大重复。
  • 设置水平线性布局的“重量总和”为1。
  • 现在添加的按钮之前,每个按钮的重量设定为0.1
  • 保持为按钮的数字的计数器加入从1开始,并且当它达到10,添加另一个水平线性布局。

您可以根据需要更改按钮的重量,使其变大或变小,然后调整计数器以相应地执行操作。例如,如果你决定为每个按钮分配权重= 0.2,那么你的计数器应该计数到5(1/0.2 = 5)。您也可以将重量设置为0.05或0.025等,具体取决于每行所需的按钮数量。

这样您就不必担心不同的屏幕尺寸,因为weight属性会调整任何屏幕尺寸的视图。

1
  1. 创建垂直线性布局
  2. 添加水平线性布局到垂直线性布局
  3. 然后添加按钮水平线性布局使用addView方法
  4. 保持按钮的计数,并且当到达从第2步
+0

我想过这个,但如何找到按钮是否填满了屏幕的整个宽度? – 2012-08-03 11:02:46

+0

您可以根据每个按钮的屏幕大小和大小来计算该值。因此,您可以轻松设置最大行数 – Gautam 2012-08-03 11:05:34

1

如果你想对系统如何在屏幕上放置对象有更多的控制权限,我建议你实现自定义布局。

你应该创建一个扩展的ViewGroup类和重载的方法:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 

保护无效onLayout(布尔为arg0,INT ARG1,诠释ARG2,诠释ARG3,INT ARG4)

在这种方法中,您将描述如何将对象放置在屏幕上。例如,如果你的对象都具有相同的尺寸,你可以calc下从左侧和距离顶边是这样的距离:

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"  

    /> 

希望这有助于。