7

я пытаюсь изменить значок цвет значка в пределах FAB на основе состояния кнопки:Изменение цвета значка ФАБ на основе состояния ж/Compat LIBS

<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> 

Это отлично работает в API> 23, однако в старых версиях android он генерирует исключение.

Вот где я запутаться:

андроида: оттенок жизни собственности в рамках поддержки FAB и работает, если его просто цвет, даже в более старых версиях Android. IE это работает во всех версиях, которые я тестировал:

android:tint="@color/black 

Но когда я использую селектор, это не так. Что я делаю не так? Можно ли изменить цвет значка на основе состояния для FAB в старых версиях Android?

+0

вы пробовали делать это в коде с помощью setImageTintList FloatingActionButton (в)? – CSmith

+0

setImageTintList() доступен только на api 21 и выше. Мне нужен способ appomppat, чтобы оттенять цвет значков. – lostintranslation

+0

Я чувствую, что это ошибка или недосмотр в том, что FAB не расширяет андроид.support.v7.widget.AppCompatImageView, вместо этого расширяет версию non appcompat. Который кажется плохим, поскольку FAB находится в библиотеке поддержки виджета. – lostintranslation

ответ

8

ColorStateList в андроида: Оттенок не поддерживается до API 21.

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


Вы можете использовать AppCompat-х AppCompatResources и опорно-v4 DrawableCompat поддерживать предварительно леденец , Сначала удалите android:tint="@color/add_button_tint" из вашего макета. Затем установите ColorStateList программно:

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); 

См How to use setImageTintList() on Android API < 21