Mriežky v Androide cez GridLayout

2019/02/20

Vlastné piškvorky v Androide si vyžadujú mriežku 3 x 3, ktorá zaberá celú obrazovku. Ako na to v Androide?

Máme viacero možnosti:

GridLayout

Ukážme si GridLayout!

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:columnCount="3"
    tools:context=".MainActivity">


    <Button android:text="1" app:layout_gravity="fill" app:layout_rowWeight="1" app:layout_columnWeight="1" />
    <Button android:text="2" app:layout_gravity="fill" app:layout_rowWeight="1" app:layout_columnWeight="1"/>

	<!-- sedem ďalších gombíkov -->
</android.support.v7.widget.GridLayout>

Ak vyvíjame pre API 21 a novšie, čo je dnes už bežná situácia, môžeme použiť zabudovaný GridLayout. Problém je, že na niektorých zariadeniach sú rozkošné bugy — ba dokonca samotný emulátor API 21 layoutuje nesprávne.

Záchranou je knižnica kompatibility.

Závislosti

Medzi modulové závislosti v build.gradle, do sekcie dependencies pridáme knižnicu pre kompatibilný GridLayout:

implementation 'com.android.support:gridlayout-v7:28.0.0'

Layoutový súbor

Teraz môžeme použiť koreňový layout android.support.v7.widget.GridLayout. Nastavíme mu vlastnosti:

Následne nasekáme pod seba deväť identických widgetov do mriežky. Pre jednoduchosť si tam nahádžeme gombíky, ale v estetickej appke by sme tam mohli dať ImageView:

<Button android:text="1" app:layout_gravity="fill" app:layout_rowWeight="1" app:layout_columnWeight="1" />

Na to, aby sa widgety roztiahli na celú obrazovku, potrebujeme nastaviť váhy:

Rovnaké nastavenie platí aj pre ostatné widgety!

>> Home