Drawable resources

Jednym z mankamentów widżetu Losowy Fakt z Wikipedii, był fakt, że do momentu zmiany tekstu, nie widzieliśmy, czy w widżet kliknęliśmy.  Na szczęśćie Android udostępnia gotowe rozwiązanie tego problemu. W tym celu możemy wykorzystać drawable resources, czyli grafiki, do których inne pliki xml mogą się odwoływać poprzez atrybut android:drawable. Przykładem drawable resource jest StateListDrawable

StateListDrawable wyświetla różne grafiki dla odpowiednio zdefiniowanych stanów aplikacji. Dla  Losowego Faktu z Wikipedii możemy wskazać dwa stany: stan, w którym widżet jest wciśnięty i stan, w którym ciekawostka jest poprostu wyświetlana. Teraz wystarczy, że przy wwciśnięciu zmienimy tło widżetu na błękitne:

StateListDrawable można definiować jako xml, którego korzeniem jest element <selector>. Stany oraz odpowiadające im grafiki są zdefiniowane w elementach <item>. Aby zdefiniować tryb widżetu na wciśnięty należy ustawić wartość atrybutu  android:state_pressed.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/appwidget_bg_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/appwidget_bg"/>
</selector>

Powyższy plik app_widget_bg_clickable.xml  znajduje się w katalogu res/drawable. W tym samym katalogu powinny znajdować sie grafiki appwidget_bg.png i appwidget_bg_pressed.png. Oba pliki wzięłam ze strony:
https://developer.android.com/guide/practices/ui_guidelines/widget_design.htmlPoniżej znajduje się fragment main_widget.xml z definicją interfejsu użytkownika. Wartość atrybutu android:background zawiera odniesienie do xml-a appwidget_bg_clickable. Warto zapamiętać atrybut android:clickable. Ja na początku nie miałam go zdefiniowanego i zmiana tła po wciśnięcu nie działała.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable = "true"
    android:padding="@dimen/widget_margin"
    android:id = "@+id/layout"
    android:layout_margin="@dimen/widget_margin"
    android:background="@drawable/appwidget_bg_clickable">
Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s