我正在動態生成TableRows。對於每個TableRow,一列中有一個TextView,另一列中有一個EditText。我如何生成這樣的行,使TextView佔用一半的行,EditText佔據另一半?如何在兩列之間均勻分割TableRow?
這是我目前有:
佈局XML文件
<TableLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
android:id="@+id/formTable" />
的Java源文件
private TreeMap<String, EditText> textData;
...
protected void onCreate(Bundle savedInstanceState) {
...
textData = populateMap();
...
TableLayout table = (TableLayout) findViewById(R.id.formTable);
configureTableLayout(table,textData);
}
private TreeMap<String, EditText> populateMap() {
TreeMap<String, EditText> map = new TreeMap<String, EditText>();
Set<String> dataTypeSet = app.getWorkingDataTypeList();
for (String dataTypeKey : dataTypeSet) {
EditText edit = new EditText(this);
edit.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
edit.setText("0");
edit.setHorizontallyScrolling(true);
map.put(dataTypeKey, edit);
}
return map;
}
private void configureTableLayout (TableLayout table,
Map<String, ? extends View> input) {
for (Map.Entry<String, ? extends View> entry : input.entrySet()) {
addTableRow(table, entry.getKey(), entry.getValue());
}
}
private void addTableRow(TableLayout table, String dataTypeKey, View v) {
TableRow row = new TableRow(this);
row.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
TextView textCol = new TextView(this); // left column
textCol.setText(app.getTypeNameForKey(dataTypeKey));
textCol.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.FILL_PARENT));
textCol.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
textCol.setHorizontallyScrolling(true);
// right column
TableRow.LayoutParams params = new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT);
params.column = 1;
v.setLayoutParams(params);
row.addView(textCol);
row.addView(v);
table.addView(row);
}
我已閱讀this post了,但它不完全是我尋找。我平均分割每一行的主要動機是,如果app.getTypeNameForKey(dataTypeKey)
(位於addTableRow()
中)的字符串之一過長,則可能會導致EditText列變得太小而不易讀。
有助於知道,但它不工作,如我所料。這裏是我的[修改後的代碼](http://www.pastie.org/2103086)(修訂在'populateMap()'(它定義了'EditText'行爲)和'addTableRow()'(它定義了'TextView'和' TableRow'行爲))。我做的唯一的其他更改是從xml文件中刪除'android:stretch_columns =「*」'行。列的行爲還沒有改變,並且TextView仍佔用了一半以上的空間。 – kibibyte
微小更新:我一直在孤立的xml佈局文件中嘗試你的方法。當只有一個帶有「TextView」和「EditText」的「TableRow」時,所有東西都可以工作。但是,一旦將'TableRow'放置在'TableLayout'中,偶數列大小將無法保持,恢復原來的問題。 (TL; DR-它在單個TableRow中工作,但不在TableLayout中的TableRow中) – kibibyte
不幸的是,我似乎無法抗衡[[列的寬度是由具有該列中最寬的單元格的行定義。「](http://developer.android.com/reference/android/widget/TableLayout.html)我正在訴諸將TableRows添加到單個LinearLayout,該工作將在我的情況,因爲我想要固定寬度的列。 – kibibyte