2016-07-13 2 views
1

Я пытаюсь выяснить, как изменить цвет фона кнопки плавающего действия, когда он отключен в течение 2 секунд после нажатия. Я также хотел бы, чтобы он вернулся к первоначальному цвету, когда закончилась 2-секундная продолжительность.Изменение цвета фона FAB при отключении

Это код для 2-секундной задержки при нажатии. Этот код находится в фрагменте в MainActivity.

appBar.setExpanded(true, true); 
fab.setVisibility(View.VISIBLE); 
fab.setImageResource(R.drawable.ic_phone_white_18dp); 

fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    fab.setClickable(false); 
    Timer buttonTimer = new Timer(); 
    buttonTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
      fab.setClickable(true); 
      } 
     }); 
     } 
    }, 2000); 

Я пытался играть вокруг с StateListDrawable методов в документации, но не встречал ничего, что работает.

Это XML для цветовых темах FAB

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@color/themeColorPressed" android:state_pressed="true"/> 
    <item android:color="@color/themeColorPressed" android:state_checked="true"/> 
    <item android:color="@color/themeColorPressed" android:state_selected="true"/> 
    <item android:color="@color/themeColorPressed" android:state_enabled="false"/> 
    <item android:color="@color/themeColor" android:state_enabled="true"/> 
</selector> 

ответ

2

Просто позвоните fab.setBackgroundColor(Color.GRAY); (или любой другой цвет), когда вы отключите его. Также вы можете использовать fab.setBackgroundColor(getResources().getColor(R.color.colorAccent0)); для использования цвета ресурса.

+0

в основной деятельности? где? –

+0

Всякий раз, когда вы решите изменить, включили ли его или отключили, измените цвет там. Так что, будь то внутри кода Fab (fab должен быть объявлен окончательным в этом случае) или внутри вашего onCreate вашего основного действия или другого метода, поместите его там. – TheAnonymous010

0

Я только что нашел то, что работает хорошо ...

Во-первых, я переместил метод setEnabled() в селекторном XML в теме кнопки по крайней мере выше декларации цвета, как так.

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

<item android:color="@color/themeColorPressed" android:state_pressed="true"/> 
<item android:color="@color/themeColorPressed" android:state_checked="true"/> 
<item android:color="@color/themeColorPressed" android:state_selected="true"/> 
<item android:color="@color/grey" android:state_enabled="false"/> 
<item android:color="@color/themeColor"/> 

Установка его изначально ложным для этого уважаемого цвета он назначен.

Затем в коде Java, просто вызовите метод setEnabled на кнопке вы таргетинга по карте (FAB в данном случае) и использовать логическое значение продиктовать активировано ли его или отключить в методе OnClick:

       fab.setClickable(false); 
           fab.setEnabled(false); 
           Timer buttonTimer = new Timer(); 
           buttonTimer.schedule(new TimerTask() { 
            @Override 
            public void run() { 
             runOnUiThread(new Runnable() { 
              @Override 
              public void run() { 
               fab.setClickable(true); 
               fab.setEnabled(true); 
              } 
             }); 
            } 
           }, 2000); 
+0

Это правильный способ, если вы не хотите слушать клики на кнопке в отключенном состоянии. Например. если NFC отключен на устройстве, FAB должен быть отключен, но затем вы не можете отобразить диалоговое окно предупреждения, направляющее пользователя в «Настройки», чтобы включить NFC. – marienke

Смежные вопросы