2012-02-27 10 views
13

Mam przycisk z tłem zdefiniowanym w xml. Chciałbym odcień przycisku na podstawie aktualnego stanu, w którym się znajduje - tj. - naciśnięty, ustawiony, normalny.Zmiana odcienia losowania w selektorze xml

Oto mój plik xml poniżej. Ponadto, moje colored_tint_dark i colored_tint są zarówno półprzezroczystymi kolorami, które próbuję narysować nad obrazem, który wywołuję z folderu zasobów. Oto problem. Kiedy interfejs użytkownika ładuje się najpierw, obraz ma odpowiedni odcień, ale po naciśnięciu, naciśnięty stan nie pokazuje żadnego odcienia, wtedy normalny stan nie będzie pokazywał żadnego odcienia.

<?xml version="1.0" encoding="utf-8"?> 

<item android:state_pressed="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button"> 
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint" 
      android:startColor="@color/colored_tint" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item android:state_focused="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button"> 
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint" 
      android:startColor="@color/colored_tint" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item android:drawable="@drawable/rounded_grayscale_pinstripe_button">   
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint_dark" 
      android:startColor="@color/colored_tint_dark" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint_dark" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

wiem, że istnieją rozwiązania w Java, ale ja specjalnie szuka rozwiązania w XML. Dzięki.

Odpowiedz

12

Tworzenie tint_menu_item.xml selektora:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@color/white" android:state_pressed="true" /> 
    <item android:color="@color/white" android:state_activated="true" /> 
    <item android:color="@color/green" /> 
</selector> 

(W moim przykładzie, obraz jest biały, gdy wybrany, a na zielono, gdy nie wybrano)

Następnie w twoim xml możesz dodać atrybut tinty do ImageView:

<ImageView 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:tint="@color/tint_menu_item" 
    android:src="@drawable/ic_menu_home" /> 

Można również użyć tego przełącznika na TextView użyciu textColor attibute:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/tint_menu_item" /> 
+0

Witam, mam problem z selektorem odcień na Api 18 i dolnej [LINK] (http://stackoverflow.com/questions/38673196/crash -odczas rysowania-z-nakładaniem-wektor-do-selekcji-koloru-selektora) Czy masz sugestie, jaki może być problem? – Alex

+0

android: atrybut tint nie działa na wszystkich komputerach APIS. Aby rozwiązać ten problem, możesz utworzyć plik .png z odpowiednim kolorem bezpośrednio, a następnie usunąć atrybut android: tint z obrazu ImageView –

+0

. Gdzie umieścić tint_menu_item.xml? – rraallvv

Powiązane problemy