как получить текущий цвет FloatingActionButton

#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. Вишну, ваше предложение является наиболее оптимальным. Спасибо.