如何确保状态栏和上下文操作模式工具栏同时发生颜色变化
How to make sure color change happens simultanously on both status bar and contextual action moded toolbar
目前,我正在遵循 的建议,以便在进入上下文操作模式时更改状态栏颜色。
但是,从下面的视频中,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());
...
这是因为正常显示和上下文显示Toolbar
上有切换视图的动画。您看到它是因为切换状态栏颜色时没有应用动画。
我在 android 源 ActionBar
实现中进行了深入研究,使用 500 秒在上下文视图和普通视图之间切换。在 android 来源中查看 this 动画持续时间。
可能您需要执行 ValueAnimator
和 ArgbEvaluatior
,这将使状态栏的颜色变化动画化。 运行这个动画在你销毁的时候ActionMode
。持续时间应为 500 秒或 config_longAnimTime
希望对您有所帮助。 :)
目前,我正在遵循
但是,从下面的视频中,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());
...
这是因为正常显示和上下文显示Toolbar
上有切换视图的动画。您看到它是因为切换状态栏颜色时没有应用动画。
我在 android 源 ActionBar
实现中进行了深入研究,使用 500 秒在上下文视图和普通视图之间切换。在 android 来源中查看 this 动画持续时间。
可能您需要执行 ValueAnimator
和 ArgbEvaluatior
,这将使状态栏的颜色变化动画化。 运行这个动画在你销毁的时候ActionMode
。持续时间应为 500 秒或 config_longAnimTime
希望对您有所帮助。 :)