Tương đương với các loại colspan 'trong Android TableLayout là gì?


132

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 đó là TableRow với một mục đó. Nó ám như thế này:

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

Những gì tôi muốn làm là làm cho Cell 3 trải dài trên cả hai ô trên, vì vậy nó trông như thế này:

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

Trong HTML Tôi sẽ sử dụng một COLSPAN .... làm cách nào để nó hoạt động trong Android?


Imho, tôi tìm cách tốt hơn để làm điều này. Đây là câu trả lời: stackoverflow.com/a/18682293/1979882
Vyacheslav

1
Đối với bản ghi, lưu ý rằng TableLayout thực chất là một linearLayout. Điều đó có nghĩa là bạn có thể thêm bất kỳ đứa trẻ trực tiếp. Vì vậy, đối với chế độ xem toàn bộ cột, bạn có thể bỏ qua TableRow.
ralfoide 2/2/2015

Câu trả lời:


196

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

CẬP NHẬT: Thuộc tính này phải được áp dụng cho các phần tử con của TableRow. KHÔNG cho TableRow chính nó.


8
Yup, đây là một trong những. Tuy nhiên, tiện ích bố trí 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ó làm việc.
Spike Williams

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;)
Nirav Zaveri

Tôi sử dụng layout_span trên quan điểm của tôi. Sau đó, tôi không thể sử dụng trọng lượng trên quan điểm đó. Tôi phải sử dụng quấn_content. Tại sao?
eC Droid

93

Chỉ cần 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 bảngLayout của tôi, kéo dài 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>

36

Và đây là cách bạn làm điều đó theo lập 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);

7
Bạn cũng có thể cần đặt params. weight = 1 để làm cho nội dung được kéo dài lấp đầy hàng.
rmirabelle

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

7
Hãy chắc chắn để thêm con vào hàng đầu tiên.
Artem Kalinchuk

1
@DacSaunders Trả lời lại. Chỉnh sửa của bạn là cụ thể cho nhu cầu của bạn. Câu trả lời ban đầu là chung cho phương pháp và 31 ngón tay cái lên có thể cho bạn biết có thể bạn đang làm gì đó sai? Xem bình luận của Artem cũng nhấn mạnh rằng trẻ cần được thêm vào trước. Trong childtrường hợp này có thể là bất cứ điều gì, không chỉ là textview như chỉnh sửa của bạn đề xuất. Cảm ơn
Onimusha

27

Bạn phải sử dụng layout_ weight để điền vào 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 yếu tố nhỏ hoặc linh hoạt, trong trường hợp của tôi là Spinner.
chksr

5

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


1
Và nó không cần phải là một tuyến tính. Tôi chỉ đưa ra một quan điểm, như tôi muốn.
JPMagalhaes

3

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


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 của Onimush có vẻ tốt, nó không hoạt động với giao diện người dùng được tạo.

Đây là một đoạn mã mà .... không hoạt độ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);

            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ã có vẻ ổn, nhưng khi bạn đạt đến init của "the_params", nó sẽ trả về NULL.

Mặt khác, mã này hoạt động như một bùa mê:

            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 đặt nhịp. Và trong trường hợp này, nó hoạt động. Hy vọng điều này sẽ giúp được ai đó!


0

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

Tôi vẫn thấy khó có thể phân chia giao diện độc đáo thành 50-50 phần trong Android.


Cuối cùng tôi đã làm điều này để khắc phục một lỗi khác liên quan đến bảng khiến 1/3 bố cục của tôi bị ẩn trong chế độ ngang, không rõ lý do.
Spike Williams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.