nhưng tôi cần để có thể tự động thêm hàng vì số lượng chỗ tăng.
Điều này không khó, khi bạn có đối tượng mới nối thêm TableRow
với dữ liệu vào TableLayout
.
Tôi hiểu phần nào cách thực hiện việc này cho số mục cố định được mã hóa trên xml, nhưng cách nào tốt nhất khi số lượng đối tượng đến từ tệp Activity.java?
Tôi không nghĩ rằng đó là cách tốt nhất (hoặc những gì bạn cho là tốt nhất). Bạn có thể:
- Chèn chế độ xem giả để hoạt động như bộ chia. Điều này sẽ dễ dàng hơn để thực hiện trực quan nhưng nó cũng sẽ làm tăng mức tiêu thụ bộ nhớ của ứng dụng của bạn, với những hậu quả xấu nếu số lượng hàng lớn. (1)
- Hoặc sử dụng drawables cho hình nền để mô phỏng biên giới (như hình ảnh chín miếng). Điều này sẽ đơn giản hơn sau đó chèn các khung nhìn bổ sung nhưng bạn cần thêm một chút tài năng để làm cho nó trông đẹp hơn.(2)
Một số ví dụ cho hình ảnh của bạn:
(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) hoặc hình ảnh:
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);
}
}
đâu hình ảnh là:
Bỏ qua kỹ năng thiết kế của tôi.
Nếu bạn thấy trước một số lượng lớn hàng, tôi khuyên bạn nên sử dụng ListView
, bạn có thể dễ dàng làm cho nó trông giống như một bảng có viền.
Đó thực sự là những gì tôi quyết định. Tôi tạo ra một xml drawable để sử dụng. – yams
Nhân tiện Cảm ơn bạn. – yams