2017-02-24 51 views
1

对于我的学士论文,我想实现一个android应用程序。出于测试目的,我创建了一个tablelayout。行和包含单元格取决于用户输入。为了获得关于tablelayout的一些经验,我用编程方式创建了一个包含7个单元格的tablelayout:第一行是头部单元格,每个单元格都有colspan = 2。Android TableLayout cell colspan

现在,我正在逐步删除第二行中的一个单元格(从右到左)。 一切都很好。我再次移除了第二行中的一个单元格。看到图片:table with 5 cells。一切安好。但现在,当我重新编译或立即重新加载时,会发生这种情况:table with 5cells, but wrong。这里发生了什么事?我在代码中没有改变任何东西......发生了什么魔术?!我在android虚拟设备(api 17)中测试了这个解决方法。 Api 17是必需的。对于带有api 25的虚拟设备,错误不会发生。

有人可以帮助我吗?

下面的代码的一部分:

TableRow.LayoutParams params = new TableRow.LayoutParams(); 
params.span = 2; 
params.weight = 1; 

TableLayout table = new TableLayout(context); 

TableRow row1 = new TableRow(context); 
TableRow row2 = new TableRow(context); 

TextView tv1 = new TextView(context); 
tv1.setText("header"); 
tv1.setWidth(300); 
tv1.setHeight(100); 
tv1.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
tv1.setBackground(darkBackground); 
tv1.setLayoutParams(params); 
row1.addView(tv1); 

TextView tv2 = new TextView(context); 
tv2.setText("header"); 
tv2.setWidth(300); 
tv2.setHeight(100); 
tv2.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
tv2.setBackground(darkBackground); 
tv2.setLayoutParams(params); 
row1.addView(tv2); 
+0

通常建议使用AS布局构建器/ XML创建布局,而不是在代码中手动创建布局。通过布局构建器,您还可以看到布局的外观,而不必在不同的设备屏幕上运行它。 – nbokmans

+0

对于我的应用程序而言,内部布局构建器不适用。用户可以在外部XML文件中定义一个表格,该表格将被导入。表格结构可以因用户而异。 – Rotzloeffel

回答

1

FYI:我找到了解决办法。这是关于背景的。由于GradiantDrawable-Object的定义不正确,第二张图片中的背景(灰色)(具有5个单元但错误的表格)(第一行,第一个单元格)不符合完整宽度。我忘了设置shape属性:

GradiantDrawable background = new GradiantDrawable(); 
background.setColor(Color.rgb(235,235,235)); 
background.setStroke(1, Color.rgb(0,0,0)); 
// don't forget to set the following attribute: 
background.setShape(GradientDrawable.RECTANGLE);