我想在android中动态创建一个布局,其中包含一些按钮。但我无法找到动态创建此布局的任何方法。
这是我的布局:
我想在完全填充设备宽度后将按钮放入下一行。按钮总数可以变化。 有没有办法动态地做到这一点?
更新: 根据您的建议,我正在使用此代码:
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);
}
但它只显示单行按钮。哪里我做错了?
更新:
好的,我已经解决了我的问题。我正在为for循环添加布局。因此布局只增加了一次。
答案 0 :(得分:2)
您可以根据需要更改按钮的重量,使其更大或更小,然后调整计数器以相应地运行。
例如,如果您决定为每个按钮分配权重= 0.2,那么您的计数器应计为5(1 / 0.2 = 5)。您还可以将重量设置为0.05或0.025等,具体取决于每行所需的按钮数量。
这样您就不必担心不同的屏幕尺寸,因为权重属性会调整任何屏幕尺寸的视图。
答案 1 :(得分:1)
addView
方法答案 2 :(得分:1)
如果您希望更好地控制系统如何将对象放置在屏幕上,我建议您实现自定义布局。
您应该创建一个扩展ViewGroup的类并覆盖这些方法:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
和
protected void onLayout(boolean arg0,int arg1,int arg2,int arg3,int arg4)
在此方法中,您将描述如何将对象放置在屏幕上。例如,如果您的对象具有相同的大小,您可以计算左侧的距离和顶侧的距离,如下所示:
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"
/>
希望得到这个帮助。