2013-11-14 54 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