【问题标题】:Override Material Design activity return transition覆盖 Material Design 活动返回转换
【发布时间】:2016-02-20 15:26:21
【问题描述】:

我正在编写一个用于工作的旧 Android 应用程序的新版本,并使用材料设计指南、图标和效果使其保持最新状态。

我有一个登录屏幕作为我的第一个活动,我在onCreate 方法中设置了退出转换:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
getWindow().setExitTransition(exitTransition());

...

private Transition exitTransition()
{
    Fade fade=new Fade();
    fade.excludeTarget(android.R.id.statusBarBackground, true);
    fade.excludeTarget(android.R.id.navigationBarBackground, true);

    return fade;
}

...排除状态栏和导航栏,以避免它们褪色为白色,然后变回原色。

我使用以下内容设置了主要活动:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
getWindow().setEnterTransition(enterTransition());

...

private Transition enterTransition()
{
    Slide slide=new Slide();
    slide.excludeTarget(android.R.id.statusBarBackground, true);
    slide.excludeTarget(android.R.id.navigationBarBackground, true);
    slide.setSlideEdge(Gravity.END);

    return slide;
}

然后我使用以下代码从登录活动启动主要活动:

Intent myIntent=new Intent(getApplicationContext(), MainActivity.class);
myIntent.putExtra("vehicles", sb.toString());
startActivity(myIntent, ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this, toolbar, "toolbar").toBundle());
new Handler().postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        //Finish the login activity so it can't be returned to.
        LoginActivity.this.finish();
    }
}, 1000);

我不希望用户完成后返回按钮将用户带回登录页面,因为这没有任何意义,所以我使用延迟完成来避免在以下情况下发生的闪烁我在清单中使用noHistory。可能有更好的方法可以做到这一点,但到目前为止我的 Google 搜索还没有找到更好的方法。

这一切都如我所愿。问题是当我从主要活动中按下后退按钮时。应用程序不会以正常方式退出应用程序,而是尝试转换回现已完成的登录活动,并给出以下信息:

可以看到,共享工具栏并没有消失,FAB 也没有消失,RecyclerView 已经将背景淡化为透明。当过渡结束时,这一切都消失了。

那么 - 让应用知道登录活动现已消失并且此处的后退按钮应该退出应用而不是尝试返回的正确方法是什么?

【问题讨论】:

  • 你可以使用 (onBackPressed()) -- stackoverflow.com/questions/17719634/…
  • @Tasos 谢谢,成功了。刚刚将finish() 添加到onBackPressed() 方法中。想把它变成一个正确的答案以便我接受吗?
  • 给链接中的人打分

标签: android material-design android-transitions activity-transition


【解决方案1】:

尝试将以下标志设置为您的Intent

//...setup intent

//set CLEAR_TASK and NEW_TASK flags
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(myIntent, ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this, toolbar, "toolbar").toBundle());

【讨论】:

  • 对不起,这不起作用。这实际上打破了从登录到主的过渡,当主活动从右侧滑入时,登录活动明显关闭。
  • @Gareth,实际上删除 Handler 代码是为了延迟。见编辑。试着告诉我会发生什么
  • 谢谢,但这没什么区别。以前从登录到主的转换现在被破坏了,当我按下返回时,不需要的主转换仍在发生。
  • 抱歉帮不上忙。
  • 这不起作用,因为ActivityOptions.makeSceneTransitionAnimation 不适用于跨任务活动。
猜你喜欢
  • 1970-01-01
  • 2021-03-14
  • 2015-09-12
  • 1970-01-01
  • 2015-02-14
  • 2015-10-05
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多