Witam w kolejnej części cyklu programowania na Androida. Jeżeli wytrzymaliście poprzednie 3 części i dalej jesteście chętni na kursy, powiedźcie o tym znajomym . Skomentujecie itp. Byłbym bardzo ale to bardzo zadowolony. Dzisiaj zapoznamy się z „kolorowaniem” layoutów, używaniu selectorów oraz tworzeniu gradientów. Dodatkowo wszystko wprowadzimy do utworzonej wcześniej aplikacji.
Figury:
Zaczniemy od stworzenia folderu drawable(bez żadnych dopisków, chyba, że dla każdej rozdzielczości ekranu chcecie dać inne kolory gradientów. Następnie tworzymy nowy plik xml w tym folderze (new > other > android xml file > shape
gradient:
</pre> <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#f1f1f2" android:centerColor="#e7e7e8" android:endColor="#cfcfcf" android:angle="270" /> </shape>
solid:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/blue"/> </shape>
android:shape jest figurą na jakiej nałożony jest gradient lub jednostajny kolor (solid). W tym przypadku oparty na kwadracie. Start/Center/EndColor odpowiadają za poszczególne kolory (w hexie) a agle to obrót.
Teraz wchodzimy do layotu z naszymi koścmi. Na zmianę parametrów layoutu są 2 sposoby. Albo przez edytor graficzny, albo xml. W tym pierwszym klikamy ppm na komponent
a następnie wybieramy naszą „grafikę”.
Takim o to sposobem zmodernizowałem lotto za pomocą solid oval , oraz kości (łącznie z tłem)
Selectory:
Za ich pomocą możemy tworzyć np przyciski, akcję po najechaniu, kliknieciu dla grafiki danego komponentu. Utwórzmy więc przycisk złożony z 3 gradientów dla przycisku w naszych kościach.
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="false" android:state_selected="false" android:drawable="@drawable/gradientokragly"/> <item android:state_pressed="false" android:state_selected="true" android:drawable="@drawable/gradientkwadratowy"/> <item android:state_pressed="true" android:drawable="@drawable/gradientkwadratowy"/> </selector>
W tym przypadku jest to najlepsze ustawienie dla przycisków. Pierwszy <item> oznacza stan, gdy przycisk jest w stanie wolnym, drugi po najechaniu a trzeci przycisniety. Nic nie stoi na przeszkodzie by popróbować inne stany.
Podobnie jak gradienty, selectory też są traktowane jako grafiki i wybieramy je dokładnie takim samym sposobem.
kosci.xml
Dzięki powyższym modyfikacją oraz dodaniu scrollview (Za jego pomocą, nasz layout możemy przewijać. Jednak Scrollview może zawierać tylko jeden layout), zmieniamy ten layout. Do przycisków przypisujemy selectory. Do selectora przypisujemy okrągłe gradienty oraz gradient tła. Nie jest to może piękne kolorystycznie. Ale teraz wiele już od was zależy i dodatkowo dobrze obrazuje nowe elementy layoutów
<?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:background="@drawable/bgcolor" > <TextView android:id="@+id/TextView08" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#0C5687" android:text="@string/kosci" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#FFD11C" android:textStyle="bold" /> <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="30dp" > <TableRow android:id="@+id/TableRow05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/btnk100" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> <Button android:id="@+id/btnk50" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/TableRow06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/TextView06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K100" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> <TextView android:id="@+id/TextView07" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K50" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/btnk20" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> <Button android:id="@+id/btnk12" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/TableRow04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/TextView04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K20" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> <TextView android:id="@+id/TextView05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K12" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/btnk10" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> <Button android:id="@+id/btnk8" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K10" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K8" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/btnk6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> <Button android:id="@+id/btnk4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/przycisk" android:padding="20dp" android:text="@string/number" android:textColor="@color/yellow" /> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K6" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="K4" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" /> </TableRow> </TableLayout> </ScrollView> </TableLayout>
lotto.xml
W tym przypadku dodałem tło oraz pozmieniałem marginesy. Dodatkowo dodałem okrągłe solid shape o kolorze niebieskim (znajdziecie w kodzie źródłowym w res/values/colors.xml) z żółtymi literami by przypominały te lottowskie.
</pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/lottobgcolor" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#0C5687" android:text="@string/lotto" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#FFD11C" android:textStyle="bold" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" > <TextView android:id="@+id/nr1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:padding="10dp" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/nr2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:padding="10dp" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/nr3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:padding="10dp" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/nr4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:padding="10dp" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/nr5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:padding="10dp" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/nr6" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/lottoshape" android:gravity="center" android:text="@string/number" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/yellow" android:textSize="20dp" android:textStyle="bold" /> </LinearLayout> <Button android:id="@+id/btnrandom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/losuj" /> </LinearLayout>
Ostatnią z zmian jest główny layout (activity_main.xml), gdzie edycji uległ tylko nagłówek.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/labelTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="@string/app_name" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/blue" android:textSize="40dp" android:textStyle="bold" /> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/awesomepager" android:layout_width="fill_parent" android:layout_height="wrap_content" > </android.support.v4.view.ViewPager> </LinearLayout>
No to na dzisiaj tyle.
Nowością od tej części jest dodanie aplikacji do GOogle play by każdy mógł sprawdzić postępy aplikacji (Choć plik apk znajdziecie także w paczkach z źródłem do danej części kursu)
https://play.google.com/store/apps/details?id=pl.szymonmotyka.tutorialrandomizer
źródło aktualnej wersji z drobnymi poprawkami: https://dl.dropbox.com/u/14815030/tutorialrandomizerpt3.zip