2013-03-15 13 views
7

Tôi đang tạo ứng dụng Android. Ứng dụng Android này sẽ có các đối tượng động. Các đối tượng này là Địa điểm có Địa chỉ hoặc Lat/Long và khoảng cách từ vị trí hiện tại và ETA. Những gì tôi muốn làm là thêm với các đối tượng trên một biên giới TableLayout, nhưng tôi cần để có thể tự động thêm hàng khi số lượng địa điểm tăng lên.Thêm TableLayout động có đường viền trong Ứng dụng Android

Tôi hiểu một chút về cách thực hiện việc này đối với một số mục cố định được mã hóa cố định 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?

Dưới đây là một ảnh chụp màn hình của TableLayout Tôi muốn:

Table Layout

Vì vậy, các đối tượng sẽ là một nơi với một địa chỉ, khoảng cách và hướng.

Trả lời

7

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à:

  • R.drawable.cell:

  • R.drawable.extra (có thể vẽ trong suốt bằng mắt mà tái chín-vá trên):

  • R.drawable.normalrow:

  • R.drawable.firstrow:

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.

+0

Đó 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

+1

Nhân tiện Cảm ơn bạn. – yams

1

Không thể tìm ra các đường thẳng đứng, nhưng một cái gì đó bạn có thể xây dựng dựa trên

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ScrollView sv = new ScrollView(this); 

    TableLayout ll=new TableLayout(this); 
    HorizontalScrollView hsv = new HorizontalScrollView(this); 

    for(int i=1;i<5;i++) { 
     TableRow tbrow=new TableRow(this); 

     for(int j=1;j<=3;j++) { 
      TextView tv1=new TextView(this); 
      tv1.setText("Element :"+ i + "" + j); 
      tbrow.addView(tv1);     
     } 
     ll.addView(tbrow); 
     View v = new View(this); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5); 
     v.setLayoutParams(params); 
     v.setBackgroundColor(getResources().getColor(android.R.color.white)); 
     ll.addView(v); 
    } 
    hsv.addView(ll); 
    sv.addView(hsv); 
    setContentView(sv); 
} 
+0

Điều này phần nào hoạt động nhưng tôi có một danh sách các đối tượng mà tôi muốn lặp qua. – yams