Dynamiczne i wydajne tworzenie interfejsu użytkownika Piotr Michałkiewicz
Główne punkty prezentacji View i ViewGroup w kodzie OnClick() i Tag Space widget i GridLayout Dynamiczne dodawanie widgetów Animations
View i ViewGroup w praktyce
View i ViewGroup w praktyce Tworząc kod odporny na zmiany warto posługiwać się typami bazowymi, wynika to z faktu, że klasy View i ViewGroup posiadają wiele z atrybutów, do których na ogół potrzebujemy dostępu w kodzie.
View i ViewGroup w praktyce
GridLayout i Space widget
GridLayout
GridLayout GridLayout jest zbliżony charakterystyką do LinearLayout. Stanowi siatkę o zadanej liczbie kolumn i wierszy w której można umieszczać widgety zajmujące prostokątne obszary o różnym kształcie i rozmiarze.
GridLayout
Space widget Space widget jest widgetem dedykowanym dla GridLayout i jest używany do wypełniania przestrzeni GridLayout u, które chcemy pozostawić niezagospodarowane.
Space widget <Space android:layout_row="4" android:layout_column="0" android:layout_columnspan="3" android:layout_gravity="fill" />
Dynamiczne dodawanie widgetów
Dynamiczne dodawanie widgetów Tworząc dowolny obiekt typu View lub pochodnego, jako pierwszy argument konstruktora zawsze podajemy obiekt typu Context.
Dynamiczne dodawanie widgetów Context ten możemy przekazać poprzez this (oczywiście tylko w klasie aktywności), jako że Activity jest klasą dziedziczącą po Context. Drugim sposobem (zalecanym) jest pozyskanie Contextu poprzez: getapplicationcontext(), które można wywołać z poziomu klas dziedziczących po klasie Context.
Dynamiczne dodawanie widgetów Tam gdzie to możliwe zaleca się korzystanie z kontekstu aplikacji!
Dynamiczne dodawanie widgetów ViewGroup kontener = (ViewGroup) findviewbyid(r.id.kontener); View przycisk = new Button(getApplicationContext()); kontener.addview(przycisk); Powyższy kod umieści nowy przycisk zgodnie z domyślnym rozmieszczaniem elementów dla danego kontenera.
Dynamiczne dodawanie widgetów Wywołując odpowiednią metodę, możemy ustawić większość atrybutów dostępnych z poziomu XML a. Jednym z wyjątków są marginesy.
Dynamiczne dodawanie widgetów W celu określenia położenia, dynamicznie stworzonego obiektu typu View lub pochodnego, przypisujemy danemu obiektowi parametry, czyli obiekt klasy LayoutParams. View v = new View(context); v.setlayoutparams(layoutparams);
Dynamiczne dodawanie widgetów Istnieje wiele klas dziedziących po klasie LayoutParams, ważniejszą z nich jest klasa ViewGroup.MarginLayoutParams. Klasa ta pozwala na określenie marginesów danego widoku, jednak istotne jest to, że dziedziczy po niej wiele innych klas określających parametry obiektu typu View.
Dynamiczne dodawanie widgetów Są to między innymi: FrameLayout.LayoutParams, GridLayout.LayoutParams, LinearLayout.LayoutParams, RelativeLayout.LayoutParams, TableLayout.LayoutParams, TableRow.LayoutParams
Dynamiczne dodawanie widgetów Pozycjonując obiekt wewnątrz layout u używamy klasy parametrów odpowiadającej temu layoutowi.
Dynamiczne dodawanie widgetów Pozycjonując widok za pomocą RelativeLayout.LayoutParams, do określania względnej pozycji danego widoku, posługujemy się metodami: addrule(int stałaokreślającaatrybut) addrule(int stałaokreślającaatrybut, int widokdoktóregosięodnosimy) Pierwsza z tych metod dotyczy atrybutów które przyjmują wartości true lub false i poprzez tę metodę ustawiamy wartość tego atrybutu na true, np. ALIGN_PARENT_LEFT. Druga metoda służy do określania atrybutów, których wartości stanowią identyfikatory innych elementów layout u, jej drugi argument to ten właśnie identyifkator. Przykład: v.addrule(relativelayout.below, R.id.innyWidok)
Dynamiczne dodawanie widgetów Określając rozmiary widoku lub np. jego marginesów (i wszystkich innych wielkości) posługujemy się jednostką dp, jest to to samo co dip, czyli density independent points.
Dynamiczne dodawanie widgetów
Dynamiczne dodawanie widgetów LayoutInflater to klasa służąca do tworzenia instancji widgetów, zdefiniowanych w plikach XML.
Dynamiczne dodawanie widgetów LayoutInflater to klasa służąca do tworzenia instancji widgetów, zdefiniowanych w plikach XML.
Animations Tomasz Wachowski
Animations Istnieją trzy systemy animacji: View animation Property animation (API level 11) Drawable animation
Animations View animation Służy to animowania obiektów typu view, Służy to animowania obiektów typu view, jest łatwy w użyciu jednak ograniczony w stosunku do property animation
Animations Property animation Pozwala na przekształcanie atrybutów Pozwala na przekształcanie atrybutów dowolnych obiektów, w tym tych, które nie są rysowane na ekranie oraz obiektów customowych.
Animations Drawable animation Służy do konstruowania animacji Służy do konstruowania animacji składających się z klatek reprezentowanych przez obiekty typu Drawable.
View animation Wśród tego typu animacji wyróżniamy cztery typy: AlphaAnimation animcja przezroczystości TranslateAnimation animacja położenia ScaleAnimation animacja rozmiaru RotateAniamtion animacja obrotu
View animation Animacje możemy tworzyć poprzez definowanie ich w plikach XML oraz poprzez tworzenie obiektów w kodzie i ustawianie ich atrybutów.
Dziękuję Piotr Michałkiewicz