0

В настоящее время я следую предложению от https://stackoverflow.com/a/29748810/72437, чтобы изменить цвет строки состояния при входе в контекстный режим действия.Как сделать так, чтобы изменение цвета происходило одновременно и на панели состояния, и на панели инструментов контекстного действия

Однако из следующего видео, https://www.youtube.com/watch?v=2Ra56_eh7uk, мы можем наблюдать, что изменение цвета всегда происходит в строке состояния, только после этого на панели инструментов последует изменение цвета.

Есть ли способ, чтобы изменение цвета происходило одновременно, как на панели состояния, так и на панели инструментов.

@SuppressLint("NewApi") 
private class ModeCallback implements ListView.MultiChoiceModeListener { 

    public boolean onCreateActionMode(android.view.ActionMode mode, 
      android.view.Menu menu) { 
     ... 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Activity activity = getActivity(); 
      if (activity != null) { 
       activity.getWindow().setStatusBarColor(actionModeStatusBarColor); 
      } 
     } 

     return true; 
    } 

    public boolean onPrepareActionMode(android.view.ActionMode mode, android.view.Menu menu) { 
     return true; 
    } 

    public boolean onActionItemClicked(android.view.ActionMode mode, android.view.MenuItem item) { 
     switch (item.getItemId()) { 
      .... 
     } 

     return false; 
    } 

    public void onDestroyActionMode(android.view.ActionMode mode) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Activity activity = getActivity(); 
      if (activity != null) { 
       activity.getWindow().setStatusBarColor(colorPrimaryDark); 
      } 
     } 
    } 
} 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
     this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
     this.getListView().setMultiChoiceModeListener(new ModeCallback()); 
     ... 

ответ

2

Это вызвано тем, что есть анимация для переключения взглядов на Toolbar для нормального отображения и контекстная дисплея. Вы видите это, потому что при переключении цветов строки состояния анимация не применяется.

Я копаю в источнике андроида. ActionBar Реализация использует 500 секунд для переключения между контекстуальным и нормальным представлением. См. this для продолжительности анимации в источнике android.

Возможно, вам необходимо выполнить ValueAnimator с ArgbEvaluatior, который будет анимировать изменения цвета в строке состояния. Запустите эту анимацию, когда вы уничтожаете ActionMode. Продолжительность должна быть 500 секунд или config_longAnimTime

Надеюсь, это поможет. :)