基本上我想創建動態地創建與我插入的FrameLayout(容器)的水平和垂直定製分隔一個TableLayout功能。我可以很容易地做到這一點的XML,但我需要做的是,在運行時,主要是因爲我不知道有多大的表會是,也可能是很大的(要避免複製+粘貼代碼在XML多次)。如何創建在運行時動態TableLayout使用定製(水平和垂直)的分隔
這裏是我想究竟是什麼(壽靜態),但在XML:
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/unitsTableContainer"
android:layout_margin="30dp">
<View style="@style/TableVerticalDivider"/>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
</TableRow>
<View style="@style/TableVerticalDivider"/>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
<TextView style="@style/UnitTableDefaultText"/>
<View style="@style/TableHorizontalDivider"/>
</TableRow>
<View style="@style/TableVerticalDivider"/>
</TableLayout>
這裏是我的最好成績做它在運行時(動態):
private void createTable() {
TableLayout tableLayout;
View verticalTableColumnDivider;
View horizontalTableRowDivider;
TableRow tableRow;
TextView textView;
tableLayout = new TableLayout(getApplicationContext());
tableLayout.setStretchAllColumns(true);
for (int currentRow = 0; currentRow < 2; currentRow++) {
tableRow = new TableRow(getApplicationContext());
verticalTableColumnDivider = getLayoutInflater().inflate(R.layout.template_vertical_table_divider, null);
horizontalTableRowDivider = getLayoutInflater().inflate(R.layout.template_horizontal_table_divider, null);
tableRow.addView(horizontalTableRowDivider);
for (int currentColumn = 0; currentColumn < 4; currentColumn++) {
textView = (TextView) getLayoutInflater().inflate(R.layout.template_default_table_text, null);
tableRow.addView(textView);
horizontalTableRowDivider = getLayoutInflater().inflate(R.layout.template_horizontal_table_divider, null);
tableRow.addView(horizontalTableRowDivider);
}
tableLayout.addView(verticalTableColumnDivider);
tableLayout.addView(tableRow);
}
verticalTableColumnDivider = getLayoutInflater().inflate(R.layout.template_vertical_table_divider, null);
tableLayout.addView(verticalTableColumnDivider);
FrameLayout tableLayoutContainer = (FrameLayout) findViewById(R.id.unitsTableContainer);
tableLayoutContainer.addView(tableLayout);
}
這裏是模板他們的風格(當然風格在一個XML文件中,並且所有3個模板都是分開的佈局XML文件):
<View style="@style/TableHorizontalDivider"/>
<style name="TableHorizontalDivider">
<item name="android:layout_width">4dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:background">?android:attr/listDivider</item>
<item name="android:visibility">visible</item>
</style>
<View style="@style/TableVerticalDivider"/>
<style name="TableVerticalDivider">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">4dp</item>
<item name="android:background">?android:attr/listDivider</item>
<item name="android:visibility">visible</item>
</style>
<TextView style="@style/UnitTableDefaultText"/>
<style name="UnitTableDefaultText">
<item name="android:textColor">#222222</item>
<item name="android:text">Test</item>
<item name="android:textSize">16sp</item>
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center</item>
<item name="android:layout_weight">1</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">0dp</item>
</style>
,這裏是結果,頂級表是動態地進行,底部的表是它應該看起來像,但靜態作出什麼:有把textViews到TableLayout,因爲你只能看到分隔的問題 result of my tries
沒有問題,行分隔是太細,柱分隔符(如果你仔細觀察),他們也太薄,堆疊在行分隔符,不知道爲什麼他們水平,而不是垂直繪製。所以如果有人知道分隔線爲什麼會出錯,或者有解決方法,請告訴我。