2015-03-17 2 views
1

Из образца в SDK для кнопок плавающих действий у меня есть drawable:Android изменение цвета ФАБ

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true"> 
    <ripple android:color="@color/primary_light"> 
     <item> 
      <shape android:shape="oval"> 
       <solid android:color="@color/primary" /> 
      </shape> 
     </item> 
    </ripple> 
</item> 

<item> 
    <ripple android:color="@color/primary_light"> 
     <item> 
      <shape android:shape="oval"> 
       <solid android:color="@color/primary" /> 
      </shape> 
     </item> 
    </ripple> 
</item> 
</selector> 

и я устанавливаю мой TextView фон:

android:background="@drawable/fab_background" 

Есть ли способ что я могу получить доступ к fab_background или отредактировать свой собственный фон TextView, чтобы изменить цвет моего FAB?

+0

Почему косяк вы просто меняете

+0

Как мне это сделать динамически? Можно ли ссылаться на drawable в java-коде и получить доступ к этому атрибуту? –

+0

Я не думаю, что это так просто. Вы можете вызвать getDrawable, а затем что-то вроде applyColorFilter –

ответ

0

Если вы ориентируетесь на API 21+, вы можете использовать выпадающие тонированные и выпадающие списки состояний цвета, указав свою базовую схему как @android:color/white и применяя список состояний цвета в качестве оттенка.

Вы также можете воспользоваться возможностью рисования темы, если вы хотите использовать цвет пульсации по умолчанию. Я использовал это в приведенном ниже примере.

Рез/значения/colors.xml:

<resources> 
    <color name="fab_checked">...</color> 
    <color name="fab_normal">...</color> 
    ... 
</resources> 

Рез/цвет/fab_tint.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" 
     android:color="@color/fab_checked" /> 
    <item android:color="@color/fab_normal" /> 
</selector> 

Рез/рисуем/fab.xml:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?android:attr/colorControlHighlight"> 
    <item> 
     <shape android:shape="oval" 
       android:tint="@color/fab_tint"> 
      <solid android:color="@color/white" /> 
     </shape> 
    </item> 
</ripple> 

Если вы хотите изменить оттенок динамически, вы можете просто позвонить Drawable.setTint(int) или Drawable.setTintList(ColorStateList).

myFab.getDrawable().mutate().setTint(Color.RED); 

Если вы хотите сохранить проверенное состояние цвет, вы можете создать новую ColorStateList и применить это.

ColorStateList csl = new ColorStateList(
    new int[][] {{android.R.attr.state_checked},{}}, 
    new int[] {Color.GREEN, Color.RED}); 
myFab.getDrawable().mutate().setTintList(csl); 
5

Вы можете изменить цвет FAB, установив следующий атрибут <android.support.design.widget.FloatingActionButton> в макете XML:

app:backgroundTint="#ff0000" 
0

Вы можете просто попробовать этот код, работал для меня

  app:backgroundTint="@color/colorPrimaryDark" 
Смежные вопросы