poniedziałek, 10 lutego 2014

Style komponentów


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.

Przypuśćmy że mam taką sytuację, mam trzy napisy na ekranie i dla wszystkich chcę określić taki sam kolor czcionki, wielkość czcionki, ewentualnie inne parametry.



Mógłbym to robić osobno dla każdego komponentu ustawiając parametry w pliku layoutu danej aktywności. To więcej pracy niż to warte, a ponadto gdybym zechciał coś zmienić, musiałbym zmieniać dla każdego komponentu osobno. Każdy kto napisał choć jedną podstronę w HTML powinien doskonale rozumieć w czym rzecz. Podobnie jak w HTML, tak i tutaj możemy zdefiniować style i z ich użyciem stosować określone własności dla wielu komponentów naraz. Filozofia jest podobna do stosowanych przy tworzeniu stron internetowych plików css.
Zaczynam od stworzenia pliku XML ze stylem. Klikam PPM na katalogu values będącym podkatalogiem katalogu res. Wybieram new-->Android XML File. Pojawia mi się takie okno:




Podaję nazwę pliku w którym opiszę styl komponentów. Nazwałem go styl_napisow. Teraz w pliku wprowadzam kilka zmian. Dodaję dwa różne style napisów. Zawartość mojego pliku ze stylami:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="wielki_napis">
<item name="android:textSize">50dp</item>
<item name="android:textColor">#0000FF</item>
</style>
<style name="maly_napis">
<item name="android:textSize">20dp</item>
<item name="android:textColor">#FF0000</item>
</style>
</resources>

Jak widac określam wielkość i kolor czcionek. Są dwa style – dla dużego niebieskiego napisu, oraz mniejszego czerwonego. Można tutaj oczywiście określić znacznie więcej rzeczy – np. szerokość i wysokość komponentu, napis na nim, a nawet metodę która obsługuje kliknięcie komponentu. W pliku layoutu dla danej aktywności dodaję do komponentów nowy parametr: style, oraz wskazuję nazwę stylu sprzed momentem stworzonego pliku:

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="25dp"
android:layout_marginTop="35dp"
android:text="Napis numer 1"
style="@style/wielki_napis"
/>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:text="Napis numer 2"
style="@style/maly_napis"
/>

Efekt po uruchomieniu:





Style możemy stosować dla wszelakich komponentów, nie tylko dla napisów.

10 komentarzy:

  1. Ale te źródłowe to tak na odwal się przeklejone, że aż w oczy szczypie :P (zwłaszcza ten niebieski na czarnym tle)

    OdpowiedzUsuń
    Odpowiedzi
    1. Też tak uważam. Właśnie coś tam sobie skrobię na androida i od czasu do czasu pojawiają się pytania, na które poszukuję odpowiedzi w internecie. Tym oto sposobem szukając różnych rzeczy już niejeden raz trafiłam na tą właśnie stronę. Blog jest prowadzony bardzo fajnie, materiał jest zrozumiały, ale, na Litość Boską, tego kodu źródłowego nie da się czytać! Sądzę, że jest to tym bardziej trafna uwaga pod wątkiem dotyczącym styli. Autor wątku chwali się podobieństwem androidowych styli w xml-u do styli w html-u, to niech dobierze odpowiedni styl do kodu źródłowego wyświetlanego na swojej stronie! O to gorąco apeluję do Autora. Poza tym reszta na plus.

      Usuń
    2. Wiele razy miałem podobny problem, czyli np brązowe litery na czarnym tle :-) Rozwiązanie, to zaznaczenie tekstu i wtedy kolory się zmieniają na bardziej czytelne, Ale prawdę mówiąc taki dobór kolorów nie najlepiej świadczy o autorze :-)

      Usuń
  2. Ja mam taki problemik, że gdy wprowadzę jakiekolwiek zmiany, np. w tym pliku "style" - tak sobie go nazwałem, (czy nawet w poprzednich tematach, np. kolory) musiałem uruchamiać ponownie eclipse aby zmiany były widoczne w tym graficznym interfejsie aktywności. Jest jakiś sposób na to, aby tego nie robić za każdym wprowadzeniem zmian?

    OdpowiedzUsuń
    Odpowiedzi
    1. spróbuj "ctrl+s" czyli zapisanie tego co zmieniłeś, Eclipse automatycznie to odświerzy.

      Usuń
    2. spróbuj "ctrl+s" czyli zapisanie tego co zmieniłeś, Eclipse automatycznie to odświerzy.

      Usuń
  3. Drodzy,
    nie rozumiem Was. Dostajecie za darmo fajny poradnik krok po kroku, gdzie użytkownik jest prowadzony za rączkę, można się z niego naprawdę sporo nauczyć. Pomyślcie, ile czasu autor musiał spędzić na przygotowaniu go.
    Jak możecie czepiać się takich drobiazgów, jak kolor czcionki? Nieczytelne, wystarczy zaznaczyć myszką... A wytykanie błędów ortograficznych uważam za naprawdę gruby nietakt.
    Na miejscu autora chyba zamknąłbym dostęp do kursu, skoro uczeń taki niewdzięczny. Nie zdziwię się, jeśli w końcu tak zrobi...

    OdpowiedzUsuń
    Odpowiedzi
    1. To nie jest czepianie się drobiazgów, tylko zwrócenie uwagi na niektóre elementy. Jeśli autor kursu to poprawi to jest to dla niego na plus, bo jego kurs jest jeszcze lepszy - a w internecie chodzi o o aby udostępnić jak najlepszą zawartość :)

      Usuń
  4. Krótko, zwięźle i na temat - samo pokazanie możliwości fajne :)

    Warto poprawić tylko listing kodu :)

    Podziękowania dla autora ! Dobra robota !

    OdpowiedzUsuń
  5. Kurs bardzo fajny. Ludzie którzy komentują literówki czy kolorki to po prostu internetowe sknery. Sami coś napiszcie to zobaczycie jak to jest udostępnić coś komuś za darmo nie mając czasu. To są pierdoly. To nie język polski. Tu chodzi o merytorycznej i materiały

    OdpowiedzUsuń