Android TableLayout에서 "colspan"에 해당하는 것은 무엇입니까?


132

Android에서 TableLayout을 사용하고 있습니다. 지금은 하나의 TableRow에 두 개의 항목이 있고 그 아래에 하나의 항목이있는 TableRow가 있습니다. 다음과 같이 렌더링됩니다.

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

내가하고 싶은 것은 셀 3이 두 상단 셀 모두에 걸쳐 늘어나도록 만드는 것이므로 다음과 같습니다.

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

HTML에서 COLSPAN을 사용하고 싶습니다 .... Android에서 어떻게 작동합니까?


Imho, 나는 이것을하는 더 좋은 방법을 모색합니다. 이에 대한 답변은 stackoverflow.com/a/18682293/1979882
Vyacheslav

1
레코드의 경우 TableLayout은 본질적으로 LinearLayout입니다. 즉, 자녀를 직접 추가 할 수 있습니다. 따라서 단일 열 전체보기의 경우 TableRow를 건너 뛸 수 있습니다.
ralfoide

답변:


196

그것을하는 속성이있는 것 같습니다 : layout_span

업데이트 :이 속성은 TableRow의 자식에 적용해야합니다. TableRow 자체에는 없습니다.


8
그렇습니다. 그러나 Eclipse 레이아웃 위젯은 사용 가능한 특성에 나열되지 않았으므로 이에 대해 알지 못하는 것 같습니다. 그러나 작동합니다.
스파이크 윌리엄스

2
답에서 업데이트에 +1합니다. Eclipse가 Ctrl + Space에서 해당 옵션을 제공하지 않는 이유를 찾으려고 노력했습니다! : D;)
Nirav Zaveri

내보기에 layout_span을 사용합니다. 그런 다음 그 견해에 무게를 사용할 수 없습니다. wrap_content를 사용해야합니다. 왜?
eC Droid

93

답을 완성하려면 layout_span 속성을 TableRow가 아닌 ​​자식에 추가해야합니다.

이 스 니펫은 tableLayout의 세 번째 행을 보여줍니다.

<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

그리고 이것이 당신이 프로그래밍 방식으로하는 방법입니다.

//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
스팬 된 내용이 행을 채우도록 params.weight = 1을 설정해야 할 수도 있습니다.
rmirabelle

1
작동하지 않습니다. stackoverflow.com/a/18682293/1979882 여기에 설명을 썼습니다.
Vyacheslav

7
자식을 먼저 행에 추가하십시오.
Artem Kalinchuk

1
@DacSaunders 답변이 롤백되었습니다. 편집 내용은 필요에 따라 다릅니다. 원래 답변은 방법에 일반적이며 31 엄지 손가락은 당신이 뭔가 잘못하고 있다고 말할 수 있습니까? 하위 항목을 먼저 추가해야한다는 점을 강조한 Artem의 의견도 참조하십시오. child이 경우 귀하의 편집 제안뿐만 아니라 텍스트 뷰로서, 무엇이든 할 수있다. 감사합니다
Onimusha

27

전체 행을 채우려면 layout_weight를 사용해야합니다. 그렇지 않으면 테이블 레이아웃의 왼쪽 또는 오른쪽 열이 채워집니다.

<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
감사합니다. 작거나 유연한 요소, 필자의 경우 Spinner에 대한 정보가 누락되었습니다.
chksr

5

어쩌면 이것은 누군가를 도울 것입니다. 나는 해결책을 시도 layout_span했지만 이것이 효과가 없다. 그래서이 트릭으로 문제를 해결했습니다. colspan이 필요한 LinearLayout곳에 대신 사용 TableRow하십시오.


1
또한 LinearLayout 일 필요는 없습니다. 내가 원한대로보기 만했다.
JPMagalhaes

3

TableRow 요소의 자식 요소에서 android : layout_span 사용


1

코드로 생성 된 TableRow, Textview 등의 경우 rowspan에 문제가 있습니다. Onimush의 답변이 좋은 것처럼 보이지만 생성 된 UI에서는 작동하지 않습니다.

다음은 작동하지 않는 코드입니다.

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

코드는 정상인 것 같지만 "the_params"의 초기 값에 도달하면 NULL을 반환합니다.

다른 한편으로,이 코드는 매력처럼 작동합니다.

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

유일한 차이점은 범위를 설정하기 전에 TextRow를 TableRow 내부로 푸시한다는 것입니다. 그리고이 경우 작동합니다. 이것이 누군가를 도울 수 있기를 바랍니다!


0

레이아웃을 다른 레이아웃으로 감싸 야한다고 생각합니다. 하나의 레이아웃 목록을 세로로, 내부에 다른 레이아웃 목록 (이 경우에는 두 개)을 수평으로 둡니다.

나는 여전히 안드로이드에서 인터페이스를 50-50 부분으로 멋지게 분할하는 것이 어렵다는 것을 안다.


나는 알 수없는 이유로 내 레이아웃의 1/3을 가로 모드로 숨기는 다른 테이블 관련 버그를 피하기 위해이 작업을 마쳤습니다.
스파이크 윌리엄
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.