Android:如何动态创建此布局?
我想在android中动态创建一个包含一些按钮的布局。但我无法找到任何动态创建此布局的方法。Android:如何动态创建此布局?
这里是我的布局:
我想把按钮进入下一行后,他们在设备的宽度完全充满。按钮的总数可以变化。 有什么办法可以动态地做到这一点?
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循环添加布局。因此布局只增加一次。
- 添加水平线性布局在一个垂直线性布局最大重复。
- 设置水平线性布局的“重量总和”为1。
- 现在添加的按钮之前,每个按钮的重量设定为0.1
- 保持为按钮的数字的计数器加入从1开始,并且当它达到10,添加另一个水平线性布局。
您可以根据需要更改按钮的重量,使其变大或变小,然后调整计数器以相应地执行操作。例如,如果你决定为每个按钮分配权重= 0.2,那么你的计数器应该计数到5(1/0.2 = 5)。您也可以将重量设置为0.05或0.025等,具体取决于每行所需的按钮数量。
这样您就不必担心不同的屏幕尺寸,因为weight属性会调整任何屏幕尺寸的视图。
- 创建垂直线性布局
- 添加水平线性布局到垂直线性布局
- 然后添加按钮水平线性布局使用
addView
方法 - 保持按钮的计数,并且当到达从第2步
我想过这个,但如何找到按钮是否填满了屏幕的整个宽度? – 2012-08-03 11:02:46
您可以根据每个按钮的屏幕大小和大小来计算该值。因此,您可以轻松设置最大行数 – Gautam 2012-08-03 11:05:34
如果你想对系统如何在屏幕上放置对象有更多的控制权限,我建议你实现自定义布局。
你应该创建一个扩展的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"
/>
希望这有助于。
是你最近尝试过什么?否则取按钮并添加水平线性布局。 – 2012-08-03 10:58:36
我试图添加水平线性布局,但如何在达到屏幕的最大宽度后将它们放入下一行? – 2012-08-03 11:00:24