【问题标题】:How to make sure color change happens simultanously on both status bar and contextual action moded toolbar如何确保在状态栏和上下文操作模式工具栏上同时发生颜色变化
【发布时间】:2016-02-02 15:09:31
【问题描述】:

目前,我正在遵循 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());
        ...

【问题讨论】:

    标签: android android-toolbar contextual-action-bar android-statusbar


    【解决方案1】:

    这是因为在Toolbar 上有用于正常显示和上下文显示切换视图的动画。您看到它是因为在切换状态栏颜色时没有应用动画。

    我在 android 源代码ActionBar 中进行挖掘,实现使用 500 秒在上下文视图和普通视图之间切换。 android 源码中的动画持续时间见this。

    您可能需要使用ArgbEvaluatior 执行ValueAnimator,这将为状态栏的颜色更改设置动画。当您销毁 ActionMode 时运行此动画。持续时间应为 500 秒或config_longAnimTime

    我希望这会有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多