#android #colors #floating-action-button #material-components-android
#Android #Цвет #кнопка с плавающим действием #материал-компоненты-android
Вопрос:
У меня есть FloatingActionButton в моем приложении: https://i.stack.imgur.com/iOj2C.jpg ведьма имеет конфигурацию в соответствии с изображением по ссылке выше.
В моем приложении пользователь может изменить цвет этой FloatingActionButton, нажав на эту кнопку.
fabUP = findViewById(R.id.fab_dwn);
fabUP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Saving mode", Snackbar.LENGTH_LONG).setAction("SAVE", null).show();
fabDOWN.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.FLOAT_dark_GREEN)));
fabUP.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.FLOAT_bright_RED)));
SAVE=true;
}
});
Я хотел бы сохранить цвет этой кнопки в методе onSaveInstanceState и установить в методе onRestoreInstanceState.
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
//here I would like to save the colour of my FloatingActionButton
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState!=null)
{
//and here I would like to set the colour of my FloatingActionButton
}
}
Как это сделать?
Ответ №1:
Вы можете использовать:
fab.getBackgroundTintList()
Ответ №2:
Для меня это работает нормально:
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if(fabUP!=null)
{
outState.putString("fabUP", fabUP.getSupportBackgroundTintList().getDefaultColor() "");
}
}
и
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState!=null)
{
fabUP.setBackgroundTintList(ColorStateList.valueOf(Integer.parseInt(savedInstanceState.getString("fabUP"))));
}
}
Ответ №3:
Чтобы сохранить цвет в методе onSaveInstanceState, вы можете использовать, например
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
//here I would like to save the colour of my FloatingActionButton
outstate.putParcelable("fab_up", fabUP.getBackgroundTintList())
outstate.putParcelable("fab_down", fabDOWN.getBackgroundTintList())
}
Чтобы восстановить цвет, вы можете использовать
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState!=null)
{
//and here I would like to set the colour of my FloatingActionButton
fabDOWN.setBackgroundTintList(savedInstanceState.getParcelable("fab_down"));
fabUP.setBackgroundTintList(savedInstanceState.getParcelable("fab_up"));
}
}
Комментарии:
1. Вишну, ваше предложение является наиболее оптимальным. Спасибо.