TableLayout
to element ViewGroup
, który wyświetla podrzędne elementy View
w wierszach i kolumnach.
Uwaga: aby uzyskać lepszą wydajność i obsługę narzędzi, utwórz układ za pomocą ConstraintLayout.
TableLayout
umieszcza elementy podrzędne w wierszach i kolumnach. Kontenery TableLayout nie wyświetlają linii obramowania w wierszach, kolumnach ani komórkach. Tabela będzie mieć tyle kolumn co wiersz z największą liczbą komórek. Komórki w tabeli mogą być puste. Komórki mogą obejmować wiele kolumn, tak jak w kodzie HTML. Kolumny możesz rozciągać, korzystając z pola span
w klasie TableRow.LayoutParams
.
Uwaga: komórki nie mogą rozciągać się na wiele wierszy.
Obiekty TableRow
to widoki podrzędne elementu TableLayout (każdy obiekt TableRow definiuje jeden wiersz w tabeli). Każdy wiersz zawiera 0 lub więcej komórek, z których każda jest definiowana przez inny widok danych. Komórki wiersza mogą się więc składać z różnych obiektów View, takich jak ImageView czy TextView. Komórka może być też obiektem ViewGroup (na przykład możesz zagnieździć inny obiekt TableLayout jako komórkę).
Poniższy przykładowy układ zawiera dwa wiersze i po dwie komórki w każdej z nich. Dołączony zrzut ekranu przedstawia wynik, a obramowania komórek są wyświetlane jako linie przerywane (dodane dla efektu wizualnego).
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="@string/table_layout_4_open" android:padding="3dip" /> <TextView android:text="@string/table_layout_4_open_shortcut" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/table_layout_4_save" android:padding="3dip" /> <TextView android:text="@string/table_layout_4_save_shortcut" android:gravity="right" android:padding="3dip" /> </TableRow> </TableLayout>
Kolumny mogą być ukryte, oznaczone, aby rozciągać i wypełnić dostępną przestrzeń na ekranie. Można je też oznaczyć jako zmniejszające, aby wymusić zwinięcie kolumny do czasu, aż tabela zmieści się na ekranie. Więcej informacji znajdziesz w dokumentacji TableLayout reference
.
Przykład
- Uruchom nowy projekt o nazwie HelloTableLayout.
- Otwórz plik
res/layout/main.xml
i wstaw ten kod:<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1"> <TableRow> <TextView android:layout_column="1" android:text="Open..." android:padding="3dip" /> <TextView android:text="Ctrl-O" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:layout_column="1" android:text="Save..." android:padding="3dip" /> <TextView android:text="Ctrl-S" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:layout_column="1" android:text="Save As..." android:padding="3dip" /> <TextView android:text="Ctrl-Shift-S" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Import..." android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Export..." android:padding="3dip" /> <TextView android:text="Ctrl-E" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:layout_column="1" android:text="Quit" android:padding="3dip" /> </TableRow> </TableLayout>
Zwróć uwagę, że przypomina strukturę tabeli HTML. Element
TableLayout
jest podobny do elementu HTML<table>
;TableRow
jest jak element><tr>>
, ale w przypadku komórek możesz użyć dowolnego elementuView
. W tym przykładzie każda komórka ma zastosowanieTextView
. Między niektórymi wierszami znajduje się też podstawowy elementView
, który służy do rysowania poziomej linii. - Upewnij się, że aktywność HelloTableUkład wczytuje ten układ w metodzie
onCreate()
:Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Metoda
setContentView(int)
wczytuje plik układu dla elementuActivity
określony za pomocą identyfikatora zasobu –R.layout.main
odnosi się do pliku układures/layout/main.xml
. - Uruchom aplikację.
Strona powinna wyglądać tak: