Android 禁用时更改晶圆厂背景色

Android 禁用时更改晶圆厂背景色,android,Android,我想知道当浮动操作按钮被按下2秒后被禁用时,如何更改其背景色。我也希望它返回到原来的颜色时,2秒的持续时间结束 这是按下时2秒延迟的代码。此代码位于MainActivity中的一个片段中 appBar.setExpanded(true, true); fab.setVisibility(View.VISIBLE); fab.setImageResource(R.drawable.ic_phone_white_18dp); fab.setOnClickListener(new View.

我想知道当浮动操作按钮被按下2秒后被禁用时,如何更改其背景色。我也希望它返回到原来的颜色时,2秒的持续时间结束

这是按下时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
方法,但没有发现任何有效的方法

这是用于FAB颜色主题的XML

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


只需拨打
fab.setBackgroundColor(Color.GRAY)(或任何颜色),当您禁用它时。您还可以使用
fab.setBackgroundColor(getResources().getColor(R.color.colorAccent0))使用资源颜色。

我刚刚发现了一些效果很好的东西

首先,我将按钮主题的选择器XML中的setEnabled()方法至少移动到颜色声明上方,如下所示

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

查看FloatingActionButton的实现,不支持
fab.setBackgroundColor(int-color)
方法

我设法用以下方法(在Kotlin中)更改了晶圆厂的颜色:

对于API<23,使用以下方法获取颜色
resources.getColor(R.color.disabled)


我如何处理不同的API方法是在Kotlin中创建一个处理所有API的扩展函数

只需使用as
应用程序:backgroundTint
选择器作为:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="...." android:state_enabled="true"/>
  <item android:alpha="..." android:color="...."/>
</selector>

在主要活动中?何处?无论何时决定更改其启用或禁用,请更改其颜色。因此,无论是在fab代码中(在本例中,fab必须声明为final),还是在主活动的onCreate或其他方法中,都将其放在那里。如果您不想在禁用状态下侦听按钮的单击,这是正确的方法。例如,如果设备上禁用了NFC,则应禁用FAB,但您不能显示警报对话框,指示用户设置以启用NFC。
                                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);
private fun toggleFabEnabled(enabled: Boolean){
    fab.isEnabled = enabled
    if (enabled){
        fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent, null))
    } else {
        fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.disabled, null))
    }
}
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="...." android:state_enabled="true"/>
  <item android:alpha="..." android:color="...."/>
</selector>
fab.isEnabled = true
fab.isEnabled = false