7

Próbuję zmienić kolor ikony ikony obrębie FAB na podstawie stanu przycisku:Zmień ikonę kolor FAB na podstawie stanu w/COMPAT bibliotekami

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/search_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="16dp" 
    android:tint="@color/add_button_tint" 
    android:src="@drawable/ic_add_black_24dp" /> 

add_button_tint.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
     android:color="@color/white" /> 

    <item android:color="@color/black"/> 
</selector> 

Działa to znakomicie w interfejsie API> 23, jednak w starszych wersjach Androida powoduje wyjątek.

Oto gdzie mogę się mylić:

Android: życie własności odcień w ramach wsparcia FAB i działa, jeśli jej tylko kolorem, nawet w starszych wersjach Androida. IE działa we wszystkich testowanych wersjach:

android:tint="@color/black 

Ale kiedy używam selektora, nie działa. Co ja robię źle? Czy można zmienić kolor ikony na podstawie stanu dla FAB w starszych wersjach Androida?

+0

próbowaliście robić to w kodzie poprzez setImageTintList FloatingActionButton za()? – CSmith

+0

setImageTintList() jest dostępna tylko w api 21 i nowszych. Potrzebuję aplikacji, aby odcień ten kolor ikony. – lostintranslation

+0

Mam wrażenie, że to błąd lub niedopatrzenie, ponieważ FAB nie rozszerza android.support.v7.widget.AppCompatImageView, zamiast tego rozszerza wersję bez aplikacji. Co wydaje się złe, ponieważ FAB znajduje się w bibliotece wsparcia dla widgetów. – lostintranslation

Odpowiedz

8

ColorStateList w android: odcień nie był wspierany przed API 21.

Patrz: https://code.google.com/p/android/issues/detail?id=204671


Można użyć AppCompat na AppCompatResources i wsparcie-v4 DrawableCompat wspierać wstępne lizaka . Najpierw usuń android:tint="@color/add_button_tint" ze swojego układu. Następnie ustaw ColorStateList programowo:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.search_button); 
ColorStateList csl = AppCompatResources.getColorStateList(this, R.color.add_button_tint); 
Drawable drawable = DrawableCompat.wrap(fab.getDrawable()); 
DrawableCompat.setTintList(drawable, csl); 
fab.setImageDrawable(drawable); 

Zobacz How to use setImageTintList() on Android API < 21

Powiązane problemy