2013-11-14 26 views
0

我正在开发一个使用片段的Android应用程序。在两个片段中,我使用TableLayout以编程方式创建由按钮组成的矩阵视图。矩阵的维度因应用的不同运行而不同,但通常我有10-15行和10-15列。Android - 如何使一个TableLayout按钮适合不同尺寸的屏幕

我有OddsButton扩展按钮。

我想让这个视图填充不同设备上的屏幕,但我一直无法理解什么是正确的方法。我可以(通过对宽度和高度进行硬编码)来影响按钮的高度和宽度(请参阅下面的代码),但我仍然在努力将其适用于Nexus 7。如果我首先找到合适的高度来使它适合屏幕,那么当我开始添加更多宽度时,按钮也会变得更高,并且我无法调整它。

很抱歉,如果这个问题很奇怪,但我希望有人能理解这一点。我意识到我可能会为此尝试完全错误的方法。

for (int k=1;k<=n2;k=k+1){ 
     OddsButton b = new OddsButton(this.getActivity()); 

     b.setLeg1(no); 
     b.setLeg2(k); 
     b.setO(this.getO(no,k)); 
     b.setIndex(this.IndexForCombination(no, k)); 
     b.setMinimumHeight(height); 
     b.setHeight(height); 
     b.setMinimumWidth(width); 
     b.setMinimumHeight(width); 
     b.setPadding(0, 0, 0, 0); 

回答

0

表格布局有点棘手。请看看这个例子:

<TableLayout 
    android:id="@+id/myId" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:stretchColumns="*" 
    android:weightSum="2" 
    > 
     <TableRow > 
     <TextView 
      android:id="@+id/text1" 
      android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
      android:text="bla1" 
      /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
      android:text="bla2" 
      /> 
    </TableRow> 
    </TableLayout 

什么是棘手的是,首先设置机器人:stretchColumns = “*” 为布局(指舒展所有列)和未来的android:layout_width = “0dp” 机器人:layout_height = “wrap_content”android:layout_weight =“1”(不要问我为什么这样下去,我永远不会理解Android中的一些棘手的东西,但他们工作得很好)。顺便说一句,weightSum只是你想要在一行中的元素的权重的总和。

当然你可以有更多的tablerows,每个元素的数量应该是相同的。

(如果你喜欢这个答案,请不要忘记给点数))。

+0

当然,我把我的例子作为xml文件,但我相信你可以很容易地将它改为程序,如果你更愿意在代码中做到这一点。 – user2707175

+0

谢谢,这是一个非常好的开始。通过这个我可以得到填满整个屏幕宽度的按钮。有什么我可以做的垂直填充屏幕以及?或者,我应该有一个垂直滚动视图,并不是所有时间都显示所有按钮? (int k = 1; k <= 15; k ++){ (TableRow tr = new TableRow(this.getActivity()); (int i = 1; i <= 15; i ++){ Button tv = new Button(this.getActivity()); tv.setText(“”+ i +“”+ k); tv.setPadding(0,0,0,0); (tv); } table.addView(tr); } – user2993944

+0

谢谢@ user2707175。上面添加的代码有点难以阅读,但是还有什么方法可以对垂直间距进行排序吗? – user2993944