2014-02-19 162 views
0

我想在我的Android應用程序中構建一個動態表。我希望有一個70%寬的專欄和一個30%寬的專欄。以編程方式應用樣式

如果我採用了android的佈局XML做到這一點:layout_weight我沒有任何問題:

<TableLayout 
    android:id="@+id/TableLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="*" 
    android:background="#ffffff" > 

    <TableRow 
     android:id="@+id/TableRow4" 
     style="@style/RigaTabella" 
     android:background="#d2ef7b" > 

     <TextView 
      android:id="@+id/TitoloSpesaTabella" 
      style="@style/Titolo" 
      android:layout_width="0px" 
      android:layout_weight="0.7" 
      android:background="#cdcdcd" 
      android:text="@string/spesa" /> 

     <TextView 
      android:id="@+id/TitoloCostoTabella" 
      style="@style/Titolo" 
      android:layout_width="0px" 
      android:layout_weight="0.3" 
      android:background="#ababab" 
      android:text="@string/costo" /> 
    </TableRow> 
</TableLayout> 

這是我獲得:http://i.imgur.com/DHpXBzJ.jpg

(我用這個灰色背景顯示兩個TextView中的實際尺寸)

但是,如果我嘗試使用此代碼:

TableLayout TableLayout = (TableLayout) findViewById(R.id.TableLayout); 
    for (int i = 0; i < 10; i++) { 
     TableRow Row = (TableRow) getLayoutInflater().inflate(R.layout.table_row_style, null); 
     if (i % 2 == 0) 
      Row.setBackgroundColor(Color.parseColor("#ffffff")); 
     else 
      Row.setBackgroundColor(Color.parseColor("#f1f1f1")); 

     TextView tv = (TextView) getLayoutInflater().inflate(R.layout.testo_sx_style, null); 
     tv.setText("Test Test"); 

     TextView tv2 = (TextView) getLayoutInflater().inflate(R.layout.testo_dx_style, null); 
     tv2.setText("$ 1000"); 

     Row.addView(tv); 
     Row.addView(tv2); 

     TableLayout.addView(Row); 
    } 

其中testo_sx_style.xml是:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="0px" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.7" 
    android:gravity="left" 
    android:textSize="13sp" 
    android:textColor="#161616" 
    android:typeface="monospace" 
    android:background="#cdcdcd" 
/> 

,並在那裏testo_dx_style.xml是:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="0px" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.3" 
    android:gravity="left" 
    android:textSize="13sp" 
    android:textColor="#161616" 
    android:typeface="monospace" 
    android:background="#ababab" 
/> 

我獲得此:http://i.imgur.com/oe6YHsz.png

我真的不知道是什麼錯誤。例如,我也嘗試在testo_sx_style.xml中將layout_width設置爲100px,但不會更改任何內容。似乎有些屬性不適用於我的代碼。

任何人都知道什麼是錯誤?提前致謝。

祝您有美好的一天:)

ps.s.對不起,我的英語

回答

0

你可能嘗試這樣的事情,利用權重參數的佈局:

TableRow tr1 = new TableRow(this); 
tabInfo = new TableLayout(this); 
tabInfo.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 4.0f)); 
tr1.addView(tabInfo); 
+0

不起作用。但是我找到了解決方案!看看我的回答:)感謝您的幫助:) –

1

解決了!只有這行代碼:

tv.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.7f)); 

有了這個我可以設置寬度爲0px,到WRAP_CONTENT高度和重量至0.7。

它很好用:)

p.s.我在這裏找到了解決方案:Set the layout weight of a TextView programmatically

+0

謝謝,它也適用於我 - 我想在右側添加一個文本(從左到右)和圖像。距文字的圖像距離與文字長度有關。你的線路解決了這個問題 –

相關問題