2010-04-26 30 views
121

Tôi đang sử dụng TableLayout trong Android. Ngay bây giờ tôi có một TableRow với hai mục trong đó, và, bên dưới đó, một TableRow với một mục là nó. Nó ám như thế này:Tương đương với "colspan" trong Android TableLayout là gì?

----------------------------- 
| Cell 1 | Cell 2  | 
----------------------------- 
| Cell 3 | 
--------------- 

Những gì tôi muốn làm là làm cho di động 3 căng trên cả hai tế bào thượng, vì vậy nó trông như thế này:

----------------------------- 
| Cell 1 | Cell 2  | 
----------------------------- 
|   Cell 3   | 
----------------------------- 

Trong HTML Tôi muốn sử dụng một colspan .. .. làm thế nào để tôi thực hiện công việc này trong Android?

+0

Imho, tôi cố gắng làm điều này tốt hơn. Ở đây câu trả lời: http://stackoverflow.com/a/18682293/1979882 – Vyacheslav

+1

Đối với hồ sơ, lưu ý rằng một TableLayout về bản chất là một LinearLayout. Điều đó có nghĩa là bạn có thể thêm trực tiếp bất kỳ đứa trẻ nào. Vì vậy, đối với một khung nhìn toàn bộ cột, bạn có thể bỏ qua TableRow. – ralfoide

Trả lời

175

Dường như có một thuộc tính làm điều đó: layout_span

UPDATE: Thuộc tính này phải được áp dụng cho trẻ em của TableRow. KHÔNG cho chính TableRow.

+8

Yup, đây là một. Tuy nhiên, tiện ích bố cục Eclipse dường như không biết về nó, vì nó không được liệt kê trong số các thuộc tính có sẵn. Nhưng nó hoạt động. –

+2

Bạn biết đấy, +1 cho bản cập nhật của bạn trong câu trả lời. Tôi đã cố gắng tìm hiểu tại sao Eclipse không đưa ra tùy chọn đó trên Ctrl + Space! : D;) –

+0

Tôi sử dụng layout_span trên chế độ xem của mình. Sau đó, tôi không thể sử dụng trọng lượng trên chế độ xem đó. Tôi phải sử dụng wrap_content. Tại sao? –

0

Tôi nghĩ bạn cần bọc bố cục xung quanh một bố cục khác. Có một danh sách Bố trí theo chiều dọc, bên trong có một danh sách Bố cục khác (hoặc trong trường hợp này là hai) theo chiều ngang.

Tôi vẫn thấy khó chia nhỏ giao diện thành 50-50 phần trong Android.

+0

Tôi đã kết thúc việc này để tìm một lỗi liên quan đến bảng khác đã khiến 1/3 bố cục của tôi bị ẩn trong chế độ ngang, vì lý do không xác định. –

82

Chỉ để hoàn thành câu trả lời, thuộc tính layout_span phải được thêm vào con, không phải cho TableRow.

Đoạn mã này hiển thị hàng thứ ba của tableLayout của tôi, mở rộng cho 2 cột.

<TableLayout> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_span="2" 
      android:text="@string/create" /> 
    </TableRow> 
</TableLayout> 
31

Và đây là cách bạn làm điều đó theo chương trình

//theChild in this case is the child of TableRow 
TableRow.LayoutParams params = (TableRow.LayoutParams) theChild.getLayoutParams(); 
params.span = 2; //amount of columns you will span 
theChild.setLayoutParams(params); 
+6

Bạn cũng có thể cần đặt params.weight = 1 để làm cho nội dung mở rộng lấp đầy hàng. – rmirabelle

+1

Nó không hoạt động. http://stackoverflow.com/a/18682293/1979882 Ở đây tôi đã viết giải thích. – Vyacheslav

+6

Đảm bảo thêm trẻ vào hàng trước. –

5

Có lẽ điều này sẽ giúp một ai đó. Tôi đã thử các giải pháp với layout_span nhưng điều này không làm việc cho tôi. Vì vậy, tôi đã giải quyết được vấn đề với thủ thuật này. Chỉ cần sử dụng LinearLayout thay cho TableRow nơi bạn cần colspan, đó là tất cả.

+1

Và nó không cần phải là LinearLayout. Tôi chỉ đặt một cái nhìn, như tôi muốn. – JPMagalhaes

3

sử dụng android: layout_span trong phần tử con của TableRow yếu tố

23

Bạn phải sử dụng layout_weight để lấp đầy toàn bộ hàng nếu không nó vẫn lấp đầy cột bên trái hoặc bên phải của bố trí bảng.

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_span="2" 
      android:layout_weight="1" 
      android:text="ClickMe" /> 

    </TableRow> 
+3

Cảm ơn bạn. Đây là thông tin còn thiếu cho các thành phần nhỏ hoặc linh hoạt, trong trường hợp của tôi là một Spinner. – chksr

1

Tôi đã gặp một số vấn đề với rowspan, trong trường hợp TableRow, Textview, v.v., được tạo bằng mã. Ngay cả khi câu trả lời Onimush có vẻ là tốt, nó không hoạt động với giao diện người dùng được tạo ra.

Dưới đây là một đoạn mã mà .... không làm việc:

  TableRow the_ligne_unidade = new TableRow(this); 
      the_ligne_unidade.setBackgroundColor(the_grey); 

      TextView my_unidade = new TextView(this); 
      my_unidade.setText(tsap_unidade_nom); 
      my_unidade.setTextSize(20); 
      my_unidade.setTypeface(null, Typeface.BOLD); 
      my_unidade.setVisibility(View.VISIBLE); 

      TableRow.LayoutParams the_param; 
      the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); 
      the_param.span = 3; 
      my_unidade.setLayoutParams(the_param); 

      // Put the TextView in the TableRow 
      the_ligne_unidade.addView(my_unidade); 

Mã này có vẻ là OK, nhưng khi bạn đạt đến init của "the_params" nó trả về NULL.

Ở đầu bên kia, mã này hoạt động giống như một nét duyên dáng:

  TableRow the_ligne_unidade = new TableRow(this); 
      the_ligne_unidade.setBackgroundColor(the_grey); 

      TextView my_unidade = new TextView(this); 
      my_unidade.setText(tsap_unidade_nom); 
      my_unidade.setTextSize(20); 
      my_unidade.setTypeface(null, Typeface.BOLD); 
      my_unidade.setVisibility(View.VISIBLE); 

      // Put the TextView in the TableRow 
      the_ligne_unidade.addView(my_unidade); 

      // And now, we change the SPAN 
      TableRow.LayoutParams the_param; 
      the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); 
      the_param.span = 3; 
      my_unidade.setLayoutParams(the_param); 

Sự khác biệt duy nhất là tôi đẩy TextView bên trong TableRow trước khi thiết lập khoảng thời gian. Và trong trường hợp này, nó hoạt động. Hy vọng điều này sẽ giúp một ai đó!

+0

WOW! điều này thực sự hoạt động! Cảm ơn bạn đã tiết kiệm cho tôi số giờ lưu trữ: D –

Các vấn đề liên quan