Android 禁用时更改晶圆厂背景色
我想知道当浮动操作按钮被按下2秒后被禁用时,如何更改其背景色。我也希望它返回到原来的颜色时,2秒的持续时间结束 这是按下时2秒延迟的代码。此代码位于MainActivity中的一个片段中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.
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