Zaczynamy od najmniejszego elementu który chcemy wykorzystać, czyli w przypadku mojej aplikacji, był to ogólny typ: View (przynajmniej na razie, finalnie pewnie zostanie zastąpiony jakimś ImageView). Dla tego typu View, który w aplikacji będzie symbolizował pojedynczą belkę tworzymy odpowiedni styl (styles.xml), u mnie wyglądało to tak:
<style name=”BricksStyle” parent=”AppTheme”>
<item name=”android:layout_width”>match_parent</item>
<item name=”android:layout_height”>wrap_content</item>
<item name=”android:layout_weight”>1</item>
<item name=”android:background”>@color/colorAccent</item>
<item name=”android:layout_margin”>5dp</item>
<item name=”android:visibility”>invisible</item>
</style>
Warto korzystać ze stylów nawet kiedy mamy mieć dwa takie same przyciski w aplikacji, dzięki temu zmiana jednego parametru, będzie następowała w jednym miejscu. Ja będę miał naprawdę sporo tych obiektów, dlatego chociażby zmiana parametru visibility w jednym miejscu zamiast stu, pozwala mi podejrzeć aplikację na podglądzie w android studio. Przed zbudowaniem aplikacji też wystarczy zmiana tylko w tym jednym miejscu, żeby zachować jej logikę działania. Gdybym chciał zmienić kolor belek, to znowu tylko jedna linia kodu. A oto jak wykorzystałem ten styl:
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:id=”@+id/container”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:orientation=”vertical”>
<View
android:id=”@+id/brick10V”
style=”@style/BricksStyle” />
<View
android:id=”@+id/brick9V”
style=”@style/BricksStyle” />
<View
android:id=”@+id/brick8V”
style=”@style/BricksStyle” />
…
Jak widać, zamiast do każdego obiektu View wklepywać to samo, wpisuję tylko jedną linię kodu.
Ok, a jak tego użyć we właściwym activiti layoucie? Korzystamy z dyrektywy include, która może przyjmować parametry takie jakie dostarcza nam właściwy layout. Oto jakie efekty udało mi się osiągnąć:
A oto jak wygląda fragment layoutu:
<include
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
layout=”@layout/stack_bricks_layout”
android:layout_above=”@+id/lineTV”
android:layout_alignParentStart=”true”
android:layout_marginLeft=”15dp”
android:layout_marginRight=”15dp”
android:layout_toStartOf=”@+id/ITV”
android:layout_below=”@+id/plusLeftBtn”
android:id=”@+id/includeLeftStack” />
<include
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
layout=”@layout/stack_bricks_layout”
android:layout_above=”@+id/lineTV”
android:layout_alignParentEnd=”true”
android:layout_marginLeft=”15dp”
android:layout_marginRight=”15dp”
android:layout_toEndOf=”@+id/ITV”
android:id=”@+id/includeRightStack”
android:layout_below=”@+id/minusRightBtn” />
PS. Pozwolę sobie na pochwalenie się statystykami od kiedy wystartowałem w tym konkursie 😉