ただし、場所の数が増えるにつれて、動的に行を追加できる必要があります。
TableRow
これは難しいことではありません。新しいオブジェクトを使用する場合は、にデータを追加しますTableLayout
。
xml上の固定されたハードコードされた数のアイテムに対してこれを行う方法はある程度理解していますが、オブジェクトの数がActivity.javaファイルから取得されている場合の最良の方法は何でしょうか。
私は最善の方法(またはあなたが最善の方法と考えるもの)があるとは思いません。あなたのどちらか:
- 仕切りとして機能する偽のビューを挿入します。これは視覚的に実装するのが簡単ですが、アプリのメモリ消費量も増加し、行数が多いと悪い結果になります。(1)
- または、背景にドローアブルを使用して、境界線をシミュレートします(9パッチ画像など)。これは、追加のビューを挿入するよりも簡単ですが、見栄えを良くするにはもう少し才能が必要です。(2)
画像の例:
(1)
private static final int DIVIDER_SIZE = 2;
// rowsCount the number of rows to add to the TableLayout
private void buildOldSchool(TableLayout table, int rowsCount) {
View divider;
for (int i = 0; i < rowsCount; i++) {
TableRow row = new TableRow(this);
for (int j = 0; j < 7; j++) {
if (j % 2 == 0) {
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
DIVIDER_SIZE, TableLayout.LayoutParams.MATCH_PARENT));
divider.setBackgroundColor(Color.GREEN);
row.addView(divider, new TableRow.LayoutParams(
DIVIDER_SIZE, TableRow.LayoutParams.MATCH_PARENT));
continue;
}
TextView tv = new TextView(this);
tv.setText("DX"); // dummy data
row.addView(tv, new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
}
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE));
divider.setBackgroundColor(Color.GREEN);
if (i == 0) {
table.addView(divider);
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE));
divider.setBackgroundColor(Color.GREEN);
}
table.addView(row);
table.addView(divider);
}
}
(2)または画像付き:
private void buildWithDrawables(TableLayout table, int rowsCount) {
for (int i = 0; i < rowsCount; i++) {
TableRow row = new TableRow(this);
row.setBackgroundResource(i == 0 ? R.drawable.firstrow
: R.drawable.normalrow);
for (int j = 0; j < 3; j++) {
TextView tv = new TextView(this);
tv.setBackgroundResource(j == 2 ? R.drawable.extra
: R.drawable.cell);
tv.setText("DX");
row.addView(tv, new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
}
table.addView(row);
}
}
画像の場所:
私のデザインスキルは無視してください。
多数の行が予想される場合は、を使用することをお勧めしますListView
。これを使用すると、境界線のあるテーブルのように簡単に表示できます。