我试图弄清楚如何在按下后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>
答案 0 :(得分:2)
禁用它时,只需调用fab.setBackgroundColor(Color.GRAY);
(或任何颜色)即可。您也可以使用fab.setBackgroundColor(getResources().getColor(R.color.colorAccent0));
来使用资源颜色。
答案 1 :(得分:1)
看FloatingActionButton的实现,不支持fab.setBackgroundColor(int color)
方法。
我设法通过以下方法(在Kotlin中)更改了FAB的颜色:
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))
}
}
对于API <23,请使用以下方法resources.getColor(R.color.disabled)
我如何处理不同的API方法是在Kotlin中创建一个扩展函数来处理所有API。
答案 2 :(得分:0)
我发现了一些效果很好的东西......
首先,我将按钮主题的选择器XML中的setEnabled()方法移动到颜色声明之上,如上所述。
<?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"/>
最初将其设置为false,以便将其分配给。
然后在Java代码中,只需在您要定位的按钮(在本例中为fab)上调用setEnabled方法,并使用布尔值来指示在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);
答案 3 :(得分:0)
只需将选择器用作 app: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.isEnabled = true
fab.isEnabled = false