2014-01-10 36 views
0

我添加按鈕到TableLayout(TableRow),我想每行有10個按鈕的上衣,但是當使用API​​16(也許所有的API10>但我沒有測試),它只是在5個按鈕之後切斷(我假設的太大,這就是爲什麼我試着對它們進行wrap_content,也嘗試填充到1,1,1,1,並且它在API 10上工作,使它們非常小但沒有發生在API16上)發生這種情況在模擬器和我的設備上。Android的setLayoutParams不工作API16

這是我想要的結果:http://img10.imageshack.us/img10/2243/fe32.png(API10)

這是結果我得到:http://i.imgur.com/VpH8Hu1.png(API16)

的java:

public class Keyboard extends Activity implements OnClickListener{ 
     TableLayout TblLayout; 
     TableRow tr; 
     String[] numRow = {"0","1","2","3","4","5","6","7","8","9"}; 
     String[] engKeys = {"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"}; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_keyboard); 

      TblLayout = (TableLayout) findViewById(R.id.tblLayout); 
      createRows(numRow); 
      createRows(engKeys); 
     } 

     public void createRows(String[] keyValues){ 
       int i = 0; 
       while (i < keyValues.length) { 
        if (i % keyValues.length == 0 || i % 10 == 0) { 
         tr = new TableRow(this); 
         TblLayout.addView(tr); 
         tr.setLayoutParams(new TableRow.LayoutParams( 
           TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT)); 
        } 
        Button btn = new Button(this); 
        btn.setText(keyValues[i]); 
        btn.setGravity(1); 
        btn.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT ,TableRow.LayoutParams.WRAP_CONTENT)); 
        btn.setId(i); 
        btn.setBackgroundColor(0xFFFFFF); 
        btn.setOnClickListener(this); 
        tr.addView(btn); 
        i++; 
       } 
      } 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    } 

XML:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/tblLayout" 
    > 

</TableLayout> 

回答

0

一個解決方案是使用LinearLayoutweightSum屬性

How to set Table width and number of Columns in TableLayout in Android

如果設置android:weightSum="1"並使用android:layout_weight="0.1"每個Button它會在所有設備上工作,但它是非常可能的,文本可以得到裁剪。爲了避免裁剪,您需要動態計算可用寬度,並確定可以插入多少行,每個文本都完全可見。

+0

我會做到這一點,如果我有,但爲什麼工作在我的代碼,較低的空氣污染,但不是在更高的嗎?我無法找到任何地方表明上述任何功能被刪除或棄用與newwer API的 – Shay

+0

你使用相同的設備或不同? – Niko

+0

我已經在我的真實設備SGS2 4.1.2和Galaxy mini 2.3.3上測試過ADT的仿真器(Nexus one 4.1.2 API16和2.3.3 API10),測試結果相同(適用於所有2.3。 3設備,但不在4.1.2設備上) – Shay

0

沒關係,發現問題,必須在將按鈕添加到TableRow之前更改它的屬性。

0

這不是對這個問題的直接回答,而是解釋爲什麼setLayoutParams根據api版本行爲不同。 如果你比較setLayoutParams在api 17和16中的實現,你會發現一個差別是resolveLayoutParams();用於api 17而不是舊版本。該方法可以設置最近的佈局參數。所以,如果你想在所有的API你setLayoutParams工作同樣的方式確保你叫它後onMeasure()