Android:如何动态创建此布局?
我想在android中动态创建一个包含一些按钮的布局。但我无法找到任何方法来动态创建此布局 以下是我的布局: 我想在按钮完全填充设备宽度后,将其放入下一行。按钮的总数可以改变。 有什么方法可以动态地做到这一点吗 更新: 根据您的建议,我正在使用以下代码:Android:如何动态创建此布局?,android,android-layout,Android,Android Layout,我想在android中动态创建一个包含一些按钮的布局。但我无法找到任何方法来动态创建此布局 以下是我的布局: 我想在按钮完全填充设备宽度后,将其放入下一行。按钮的总数可以改变。 有什么方法可以动态地做到这一点吗 更新: 根据您的建议,我正在使用以下代码: private void addQuestionPallete() { int tempBtn = 30; LayoutParams param = new LinearLayout.LayoutParams(
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);
}
private void addQuestionPallete(){
int tempBtn=30;
LayoutParams param=新的LinearLayout.LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级,0.1f);
LayoutParams param2=新的LinearLayout.LayoutParams(LayoutParams.FILL\u父级,LayoutParams.FILL\u父级,1f);
线性内容。设置权重总和(1f);
linearContent.setOrientation(LinearLayout.VERTICAL);
btnQuestionPalete=新建按钮[10];
对于(int j=0;j
但它只显示一行按钮。我哪里做错了
更新:
好的,我已经解决了我的问题。我在为for循环添加布局。因此,布局仅添加一次
addView
方法将按钮添加到水平线性布局中addView
方法将按钮添加到水平线性布局中- 在垂直线性布局中添加水平线性布局
- 将水平线性布局的“权重和”设置为1
- 现在,在添加按钮之前,请将每个按钮的权重设置为0.1
- 为从1开始添加的按钮数量保留一个计数器,当它达到10时,添加另一个水平线性布局
- 在垂直线性布局中添加水平线性布局
- 将水平线性布局的“权重和”设置为1
- 现在,在添加按钮之前,请将每个按钮的权重设置为0.1
- 为从1开始添加的按钮数量保留一个计数器,当它达到10时,添加另一个水平线性布局
通过这种方式,您不必担心不同的屏幕大小,因为“权重”属性将调整任何屏幕大小的视图。如果您想更多地控制系统如何将对象放置在屏幕上,我建议您实现自定义布局 您应该创建一个扩展ViewGroup的类并重写以下方法:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
及
仅限受保护的void布局(布尔值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"
/>
希望有帮助。如果您想更多地控制系统如何将对象放置在屏幕上,我建议您实现自定义布局 您应该创建一个扩展ViewGroup的类并重写以下方法:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
及
仅限受保护的void布局(布尔值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"
/>
希望这有帮助。是的,你试过什么?否则,点击按钮并添加水平线性布局。我尝试添加水平线性布局,但在达到屏幕最大宽度后如何将它们放入下一行?是的,您尝试了什么?否则,点击按钮并添加水平线性布局。我尝试添加水平线性布局,但如何在它们达到最大值后将它们放入下一行